在awk中放置括号的位置

时间:2011-10-06 06:52:28

标签: awk brackets

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

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

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

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

当我删除外部括号时我的参数显示,为什么这个LOC次数让我非常困惑,请帮助我 谢谢

1 个答案:

答案 0 :(得分:3)

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

pattern1 { action1 }
pattern2 { action2 }

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

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

考虑到这种结构,我们可以解释给定的例子。第一个是应用于每一行的单个动作。但是动作没有很好地形成 - 如果你移除外部支架,它就会变成一个独特的模式和动作,两者都是正确构造的。

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

的值