这是一个简单的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上打印最大长度?
我如何使用每行的最大数量?
答案 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}