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