在awk中的语句之间的分隔符

提姆

从Gawk的手册中:

当一条规则中的awk语句很短时,您可能需要在一行中放置多个以上的语句。这是通过用分号(';')分隔语句来完成的。这也适用于规则本身。因此,本节开始处显示的程序也可以这样编写:

/12/ { print $0 } ; /21/ { print $0 }

注意:要求在同一行上的规则必须用分号分隔的要求不是原来的awk语言;添加它是为了与操作中的语句处理保持一致。

但我从https://stackoverflow.com/q/20262869/156458看

awk '$2=="no"{$3="N/A"}1' file

是不是$2=="no"{$3="N/A"}1两个陈述?他们为什么不分隔任何东西?

谢谢。

乔治·瓦西里乌(George Vasiliou)

很好的问题!我认为关键是这样的:“因此,本节开头显示的程序也可以这样编写:”

不必以这种方式编写。这是一种替代方式。这意味着(并且已经在实践中证明)以下陈述都是正确的:

$ awk '/12/ { print $0 } /21/ { print $0 }' file
$ awk '/12/ { print $0 } ; /21/ { print $0 }' file

我认为这种分号用法是为了覆盖真正简短的代码,例如,我们省略了动作部分,并且希望在同一行上应用多个规则的情况:

$ awk '/12//21/' file
awk: cmd. line:2: /12//21/
awk: cmd. line:2:         ^ unexpected newline or end of string

在这种情况下,必须使用分号来分隔规则(=条件):

$ awk '/12/;/21/' file

由于{action}在两个规则/两个条件中都省略了零件,因此将对每个规则执行默认操作={print $0}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章