这个awk命令如何工作?

时间:2013-08-15 21:17:21

标签: awk

以下非常简洁的命令将在第一次出现模式(包括第一次出现)后打印所有行:

awk '/pattern/,0'

有人能解释一下这个命令是如何工作的吗? awk如何解析'/ pattern /,0'?

(顺便说一下,我没有提出这个问题;它发布在compgroups.net上。)

2 个答案:

答案 0 :(得分:5)

根据awk手册页:

  

模式是常规的任意布尔组合(带有!||&&)    表达式和关系表达式。 ...

     

模式可以由逗号分隔的两个模式组成;在这    例如,对于发生的所有行执行操作    第一个模式虽然发生了第二个。 ...

这里第一个是/pattern/,第二个是文字常量0,这是假的。所以这从匹配的第一行开始,当一行根本不存在时停止,这只在文件结束后发生。

另一个例子,比较:

jot 10

使用:

jot 10 | awk 'NR==4,NR==6 { printf("line %d: %s\n", NR, $0) }'

答案 1 :(得分:4)

因此awk '/foo/,/bar/{print $0}' file会将文件中的每一行打印出来,从foo开始直到bar

/foo/,/bar/语法称为范围模式。如果匹配第一个正则表达式常量/foo/,则将执行该块,直到第二个正则表达式常量/bar/匹配为止。通过将第二个正则表达式常量设置为0 (即假),它将永远不会匹配,因此在每行上执行块直到文件结束。

awk中如果未指定要为条件执行的block代码,则执行默认块{print $0}