2014-05-08 24 views
4

我有以下文件:awk NF文件名是如何工作的?

cat testing.txt 
============== 
line1 1 
line2 2 2 


line3 3 3 

line4 

我能理解awk 'NF > 0' testing.txt如何工作的。此命令僅處理每條記錄中具有多個字段的字段數,因此空行和製表符將被刪除。

awk 'NF>0' testing.txt 
line1 1 
line2 2 2 
line3 3 3 
line4 

但是我不明白awk NF testing.txt是如何工作的。它和上面一樣。

awk NF testing.txt 
line1 1 
line2 2 2 
line3 3 3 
line4 

我沒有在這種情況下指定任何條件。它仍然工作正常,並從每條記錄中刪除空行和標籤。

我可以在Web中看到很多引用,據說我們可以使用此命令從文件中刪除空行或製表符。但無法理解語法。

回答

7

NF代表的區域。所以無論何時NF大於0,那awk解釋爲True。所以,事實上,這是這樣做的:

if NF>0 --> True 
if NF==0 --> False 

由於awk默認行爲是{print $0},這意味着它的作用:

if NF>0 ---> True ---> {print $0} 
if NF==0 ---> False ---> nothing 

所以awk NF file意味着:打印具有至少一個字段的所有行。這自動暗示:打印所有沒有空的行。

+2

雖然我無法想象一個實際發生的情況,但可能考慮'NF!= 0'而不是嚴格的'NF> 0'。負數的字段很可能不是問題,儘管... ;-) – twalberg

+1

是的,你是對的。出於好奇,我會把它留在這裏,看看埃德莫頓或另一位「awk」大師是否爲這個話題提供了更多的信息。我不認爲這是可能的,但:)謝謝@twalberg! – fedorqui

+1

'當讀取一行時設置'NF'變量。就像'1'導致打印行一樣,如果'NF'的值爲1或更大(表示非空行,則根據值將其轉換爲「awk 1文件」或「awk 23文件」 'NF',因此打印該行,如果該行爲空,則'NF'的值爲'0','awk 0 file'不打印 –