0
以下条件表达式是我的输入文件:混淆在AWK
$ 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
以下条件表达式是我的输入文件:混淆在AWK
$ 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
我认为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") }'
它连接两个字符串没有空间。
为什么不是'($ 1 == 0?“000 222”:“111 333”)'? – Kent
@Kent:我怀疑上下文会改变,并且需要两个单独的条件。然而,在这个问题的限制范围内,你的简化也会奏效 - 但它避开了这个问题。理解这个问题比选择的规避更重要。 –
有道理...... btw如果逻辑复杂,我会写'if ...'语句,而不是嵌套'bool?foo:bar' – Kent