从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
两个陈述?他们为什么不分隔任何东西?
谢谢。
很好的问题!我认为关键是这样的:“因此,本节开头显示的程序也可以这样编写:”
不必以这种方式编写。这是一种替代方式。这意味着(并且已经在实践中证明)以下陈述都是正确的:
$ 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] 删除。
我来说两句