2

大家好,我想问一下,我对awk中的括号{}感到非常困惑,就像我写了一个代码一样

{
   FNR == 3 { print $1 " age is " $2 }
}

但它在外括号上给了我错误,但在打印语句周围的括号上没有给出错误为什么会这样:/也在下面的代码中

{
 s = $1
 d = $2
 no = $1 + $2
 {print no}
}

当我删除外括号时,我的参数显示,LOC次数为什么我很困惑请帮助我谢谢

4

1 回答 1

3

awk 脚本由命令组成。每个命令都有一个模式和一个动作:

pattern1 { action1 }
pattern2 { action2 }

对于输入中的每一行,awk 测试每个模式并在模式为真时执行相应的操作。

该模式可以省略,在这种情况下,它始终为真,并且对每一行执行操作。类似地,动作可以省略,在这种情况下,它被视为print; 这使您可以轻松地使用 awk 选择行而不更改行。

考虑到这种结构,我们可以解释给定的示例。第一个是应用于每一行的单个操作。但是这个动作没有很好地形成——如果你去掉外面的括号,它就会变成一个独特的模式和动作,两者都是正确构造的。

第二个例子也适用于每一行。它从行中获取前两个(空格分隔)字段,将它们作为数字相加,然后打印结果。删除外括号会为您提供三个没有相应操作的模式和一个没有模式的操作。因此,模式——它们是赋值的值,通常为真——具有print通常被调用的隐式。类似地,动作总是被调用,打印 的值no

于 2011-10-06T07:09:34.853 回答