关于AWK中条件表达式的困惑

时间:2015-07-21 21:23:47

标签: awk gawk

这是我的输入文件:

$ cat abc
0   1
2   3
4   5

为什么以下代码提供单列输出而不是双列输出?

$ cat abc | awk '{ print $1==0?"000":"111" $1==0? "222":"333" }'
000
333
333

输出是否应该如下?

000 222
111 333
111 333

1 个答案:

答案 0 :(得分:1)

我认为awk将解析为:

awk '{ print ($1==0) ? "000" : (("111" $1==0) ? "222" : "333") }'

也就是说,当它打印三个零时,它甚至不考虑其余的操作。当它不打印三个零时,它会打印三个三分,因为与任何字符串连接的"111"不会评估为零。

您可能想要使用:

awk '{ print ($1==0?"000":"111"), ($1==0? "222":"333") }'

其中逗号在两个字符串之间的输出中放置一个空格(确切地说是OFS或输出字段分隔符)。或者您可能更喜欢:

awk '{ print ($1==0?"000":"111") ($1==0? "222":"333") }'

将两个字符串连接起来,没有空格。