这是我的文件(实际上有几百万行):
1 75
2 188
3 279
4 267
5 100
6 28
7 479
8 325
9 225
10 181
我想找到前 5 行(第 1-5 行)的第二列的最大值并打印该最大值以及第一列的相应值。然后移动到接下来的五行(第 6-10 行)并做同样的事情。
输出应该是:
3 279
7 479
到目前为止,我可以通过这种方式计算滚动最大值:
awk '{for(i=1;i<=NF;i++) if($i>maxval) maxval=$i;} NR%5==0 { print maxval; maxval= -1}' input.file
但是,我无法从第一列打印相应的值。我尝试定义第二个变量,例如want=$1
然后尝试print maxval, want
但没有成功。我有一个模糊的印象,这可以用数组来完成,但我所有的尝试都没有成功。
TP
我不认为循环字段是你想要的。相反,只需查看记录号(或文件记录号以允许它处理多个文件)模 5:
如果
FNR
是 1,6,... OR$2
大于当前运行的最大值,则保存当前行/最大值if
FNR
is 5,10,... 打印当前行/最大值不是
awk
答案,但对于那些喜欢 shell 工具的人来说,这个GNUsplit
方法有效: