这些天,我正在学习AWK进行文本处理。但是我对AWK语法非常困惑。我在Wikipedia上读到,语法遵循以下格式:
(conditions) {actions}
我以为我可以在BEGIN和END块中遵循相同的语法。但是运行以下脚本时出现语法错误。
awk 'BEGIN{}
(1 == 1) {print "hello";}
END{
(1==1) {print "ended"}}' $1
但是,如果我在END块中进行了一些更改,并在条件之前添加了“ if”,则它运行得很好。
awk 'BEGIN{}
(1 == 1) {print "hello";}
END{
if (1==1) {print "ended"}}' $1
为什么必须在END块中写“ if”,而在普通块中则不需要?
AWK程序是一系列规则,也可能是功能。规则定义为一种模式((conditions)
以您的格式),后跟一个动作;两者都是可选的。
BEGIN
并且END
是特殊的模式。
因此在
BEGIN {}
(1 == 1) { print "hello"; }
END { if (1 == 1) { print "ended" } }
模式是BEGIN
,(1 == 1)
(不需要括号),和END
。
模式(或没有模式以匹配所有内容)之后的花括号内的块是动作。您不能在一个块中编写这样的模式,每个块都由引入它的模式来控制。必须将动作内的条件指定为if
语句(或其他条件语句while
等)的一部分。
上面的动作是{}
(空动作){ print "hello"; }
和{ if (1 == 1) { print "ended" } }
。
由组成的块会{ (1 == 1) { print "ended" } }
导致语法错误,因为(1 == 1)
在此处是一条语句,并且必须以某种方式将其与随后的语句分开;{ 1 == 1; { print "ended" } }
将是有效的,但不会达到您想要的效果-1 == 1
将被评估,然后分别评估{ print "ended" }
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句