所以,我看到這個輸出,我有點驚訝:(g)awk爲什麼會反轉這些輸出行?
$ echo "a,b,c,d,e,f,g" | cut -d, -f-4
a,b,c,d
$ echo "a,b,c,d,e,f,g" | cut -d, -f6-
f,g
echo "a,b,c,d,e,f,g" | awk '{ print $0 | "cut -d, -f-4"; print $0 | "cut -d, -f6-"; }'
f,g
a,b,c,d
(作爲一個方面說明,我意識到這是在awk
做一個完全愚蠢的事情,但它是唯一命令我看到它發生了!)。
據我所知,這應該將記錄輸入到兩個命令中 - 按順序。但由於某種原因,輸出結果反過來。如果我這樣做,而不是
$ echo "a,b,c,d,e,f,g" | awk '{ print $0 | "echo hello"; print $0 | "echo goodbye"; }'
hello
goodbye
然後,一切都按我預期的順序。我想這一定是某種形式的競爭狀態,但我很驚訝,awk
不會等待在管子命令來完成。這是一個已知的問題,使用awk
或gawk
?有什麼辦法可以避免這種陷阱?
編輯:
我嘗試了用mawk
太...相同(逆轉)結果,並且似乎兩者一致的情況發生。
這是該使用'date',我不得不在這兩個命令輸出怪異:-) – Benj 2012-04-25 15:49:12
測試。 'echo「a,b,c,d,e,f,g」| awk'{print $ 0 | 「date \」+ A%s。%N \「」;打印$ 0 | 「date \」+ B%s。%N \「」; }'' – 2012-04-25 16:01:05