在awk中放括号的位置

在awk中放括号的位置,awk,brackets,Awk,Brackets,大家好,我想问的每个人,我对awk中的括号{}感到非常困惑,就像我写了一段代码一样 { FNR == 3 { print $1 " age is " $2 } } 但是它在外括号上给了我错误,但在print语句周围的括号上没有给我错误,为什么在下面的代码中也是这样 { s = $1 d = $2 no = $1 + $2 {print no} } 当我删除外括号时,我的参数显示了LOC的次数,为什么我很困惑,请帮助我 谢谢awk脚本由命令组成。每个命令都有一个模式和一个操作:

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

{
   FNR == 3 { print $1 " age is " $2 }
}
但是它在外括号上给了我错误,但在print语句周围的括号上没有给我错误,为什么在下面的代码中也是这样

{
 s = $1
 d = $2
 no = $1 + $2
 {print no}
}
当我删除外括号时,我的参数显示了LOC的次数,为什么我很困惑,请帮助我
谢谢

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

pattern1 { action1 }
pattern2 { action2 }
对于输入中的每一行,awk测试每个模式,并在模式为真时执行相应的操作

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

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


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

的值。我发现您对第二种情况下观察到的行为的描述不是很清楚。一些示例输出和期望的输出可能会使事情更清楚。