我在awk中有如下语句
$ gawk '$2 == "-" { print $1 }' file
我想知道这条指令到底做了什么,因为我无法准确解析我需要的词。
编辑:我该怎么做才能跳过以下星号之前的行? 假设我有以下几行:
text
text
text
* * * * * * *
line1 -
line2 -
然后我只想过滤
line1
line2
加上我上面贴的那句话...
$ gawk '$2 == "-" { print $1 }' file
感谢您的时间和回复!
最佳答案
这将找到第二列(以空格分隔)为 - 的所有行,然后打印第一列。
第一部分($2 == "-")检查第二列是否为 -,如果是,则运行附加的 {} block ,打印第一列($0 为整行, $1、$2 等是第一列、第二列、...列。)
空格是这里的分隔符,因为它们是 awk 中的默认分隔符。
编辑:要执行您想现在执行的操作,请尝试以下操作(不是最优雅的,但应该可行。)
gawk 'BEGIN { p = 0 } { if (p != 0 && $2 == "-") { print $1 } else { p = ($0 == "* * * * * * *")? 1 : 0 } }'
分散在更多行上以清楚发生的事情:
gawk 'BEGIN { p = 0 }
{ if (p != 0 && $2 == "-")
{ print $1 }
else
{ p = ($0 == "* * * * * * *")? 1 : 0 }
}'
关于regex - 这个awk语句是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18347661/