簡體   English   中英

如何為awk中的每一行使用最大數量?

[英]How to use the max number for every line in awk?

這是一個簡單的awk腳本max1.awk,用於獲取所有行的最大長度。

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

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

awk -f max1.awk  test_file

現在將所有awk腳本移到max2.awk下面的BEGIN塊中。

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

為什么無法使用awk -f max2.awk test_file在test_file上打印最大長度?
如何為每行使用最大數量?

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

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

例如

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.

您可以使用getline逐行讀取文件。 如果在BEGIN塊中使用它並重復執行,直到它返回1,就可以處理整個輸入流。 if語句之前添加以下行:

while ( getline > 0 )

整個腳本如下所示:

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

暫無
暫無

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

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