大家好我想问一下我对awk中的括号{}非常困惑,就像我写了一段代码
{
FNR == 3 { print $1 " age is " $2 }
}
但是它在外部括号上给了我错误但是没有在print语句的括号上给出错误为什么会这样:/也在下面的代码中
{
s = $1
d = $2
no = $1 + $2
{print no}
}
当我删除外部括号时我的参数显示,为什么这个LOC次数让我非常困惑,请帮助我 谢谢
答案 0 :(得分:3)
awk脚本由命令组成。每个命令都有一个模式和一个动作:
pattern1 { action1 }
pattern2 { action2 }
对于输入中的每一行,awk测试每个模式并在模式为真时执行相应的操作。
可以省略模式,在这种情况下,它始终为true,并且对每一行执行操作。同样,可以省略该动作,在这种情况下,它被视为print
;这使您可以轻松使用awk选择行而不更改行。
考虑到这种结构,我们可以解释给定的例子。第一个是应用于每一行的单个动作。但是动作没有很好地形成 - 如果你移除外部支架,它就会变成一个独特的模式和动作,两者都是正确构造的。
第二个例子也适用于每一行。它从行中获取前两个(空格分隔)字段,将它们添加为数字,然后打印结果。删除外部括号可以为您提供三个没有相应操作的模式,以及一个没有模式的操作。因此,模式---作为赋值的值,通常是真的---具有通常被调用的隐式print
。同样,始终调用操作,打印no
。