繁体   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