如何使用“awk”确定文件内多个数据子集中的最大值?

如何使用“awk”确定文件内多个数据子集中的最大值?

早上好,

我正在使用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}'

相关内容