2017-04-04 68 views
0

這是一個簡單的awk腳本max1.awk以獲得所有行的最大長度。如何在awk中爲每一行使用最大數量?

#! /usr/bin/awk 
BEGIN {max =0 } 
{ 
    if (length($0) > max) { max = length($0)} 
} 
END {print max} 

它可以通過一些測試文件獲得最大長度。

awk -f max1.awk test_file 

我們將所有awk腳本到BEGIN塊如下max2.awk

#! /usr/bin/awk 
BEGIN {max =0; 
    if (length($0) > max) { max = length($0)}; 
    print max} 

爲什麼不能打印的test_file裏面最大長度的awk -f max2.awk test_file裏面
我如何使用每行最大數量?

+1

你不喜歡什麼'max1.awk'?你真正的目標是什麼?正如Kent所解釋的那樣,在從文件讀取任何行之前執行'BEGIN'塊(在這種情況下'$ 0'是空字符串)。除了'BEGIN'塊沒有必要(因爲'max'的初始值已經默認爲'0'),'max1.awk'完全正確。 – jas

+0

也有,已經有一個命令來做到這一點......'wc -L Sundeep

回答

1

BEGIN塊將前AWK讀取線被處理,如果腳本僅具有BEGIN塊,無線將被加載,僅BEGIN阻塞物通過AWK執行。

因此,您的最大長度計算沒有完成。

E.g.

kent$ awk 'BEGIN{print length($0)}'<<<"foo" 
0 #here we get 0 instead of 3, because default var in awk is "". 
    #If you print NR, it is 0 as well. 
+0

我怎樣才能使用每一行的最大數量? –

+0

@it_is_a_literature將其從'BEGIN {} – Kent

0

您可以通過getline方式逐行讀取文件行。如果您在BEGIN塊中使用它,並且只要它返回1就重複,則可以處理整個輸入流。 您if語句之前添加此行:

while (getline > 0) 

整個腳本如下所示:

BEGIN {max =0 
    while (getline > 0) 
     if (length($0) > max) { max = length($0)} 
    print max}