[英]Weird awk behaviour , $1 is printed but $0 is not?
這是印刷好的ls | xargs -I var sh -c 'echo var | awk "{print $1}"'
ls | xargs -I var sh -c 'echo var | awk "{print $1}"'
雖然這不是ls | xargs -I var sh -c 'echo var | awk "{print $0}"'
ls | xargs -I var sh -c 'echo var | awk "{print $0}"'
顯然,這不是我的用例,只是重現了問題。
因此,雖然$ 0代表整行,但$ 0被打印卻不打印$ 0是很奇怪的。
參考操作系統-Ubuntu 14.04
使用時:
ls | xargs -I var sh -c 'echo var | awk "{print $0}"'
那有$0
的雙引號,因此$0
被shell擴展了,在這種情況下,它的值sh
沒有引號。 awk
將其視為變量並打印空白。
為了使它轉義$
:
ls | xargs -I var sh -c 'echo var | awk "{print \$0}"'
為什么$1
有效:
ls | xargs -I var sh -c 'echo var | awk "{print $1}"'
$1
也由shell擴展,並且為空。 因此, awk
只會執行一個空print
,該print
等效於print $0
,您將在輸出中獲得filename。
但是,在雙引號中使用awk命令不是一個好主意,並且解析ls
輸出容易出錯。
對於其他登陸此處的用戶:如果語法完美,但是您可能正在使用Windows文件,請記住\\r
將有效覆蓋您的文本,並使其看起來像$0
是空白...。
首先運行dos2unix <file>
,然后嘗試使用awk
。
注意:用sed
或tr
刪除\\r
是不夠的
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.