![如何使用“awk”确定文件内多个数据子集中的最大值?](https://linux22.com/image/101875/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E2%80%9Cawk%E2%80%9D%E7%A1%AE%E5%AE%9A%E6%96%87%E4%BB%B6%E5%86%85%E5%A4%9A%E4%B8%AA%E6%95%B0%E6%8D%AE%E5%AD%90%E9%9B%86%E4%B8%AD%E7%9A%84%E6%9C%80%E5%A4%A7%E5%80%BC%EF%BC%9F.png)
早上好,
我正在使用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}'