簡體   English   中英

奇怪的awk行為,打印了$ 1,但沒有打印$ 0?

[英]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

注意:用sedtr刪除\\r是不夠的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM