早上好,
我正在使用awk
并尝试确定文件中多组数据的最大值。假设我有数据:
1 2 3
4 5 6 7 8
9 8 7 6 5
4 3 2
1 2 3
4 6 7 8 7
7 8 7 6 5
4 3 2
我希望输出是:
9
8
由于每四行是数据的一个子集,9 是第一组的最大值,8 是第二组的最大值。我将第一个代码块中的上述数据通过管道传输到:
awk 'NR%4<4 || NR==4 {for(i=1;i<=NF;i++) if($i>maxval) maxval=$i;}; END { print maxval;}' > file
但它只返回整个文件的最大值:
9
我想知道是否可以在一个 awk 命令中打印每 n 行(此处 n=4)的最大值,或者我是否需要将其分解?我原以为 NR%4<4 || NR==4 会告诉函数的其余部分每四行执行一次,但似乎它正在查看所有数据并且只确定一个“maxval”。
谢谢。
答案1
awk '{for(i=1;i<=NF;i++) if($i>maxval) maxval=$i;}
NR%4==0 { print maxval ; maxval= -1}'
答案2
或者,使用数组。
awk '{x=split($0,a);asort(a);if(a[x]>maxval)maxval=a[x]}
NR%4==0 { print maxval ; maxval= -1}'