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

时间:2017-04-04 07:55:59

标签: linux 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脚本移动到BEGIN块中,如下所示 max2.awk

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

为什么无法使用 awk -f max2.awk test_file 在test_file上打印最大长度?

我如何使用每行的最大数量?

2 个答案:

答案 0 :(得分:1)

在awk读取行之前将处理BEGIN块,如果您的脚本只有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.

答案 1 :(得分:0)

您可以通过getline逐行阅读文件。如果您在BEGIN块中使用它并且只要它返回1就重复,您可以处理整个输入流。 在if声明之前添加此行:

while ( getline > 0 )

整个脚本如下所示:

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