我有一个文件:
1 0.5
2 0.7
3 0.55
4 0.7
5 0.45
6 0.8
7 0.75
8 0.3
9 0.35
10 0.5
11 0.65
12 0.75
我想将文件分成 4 个数组,在接下来的第三行结束,然后在每个数组的第二列中找到最大值。所以这个文件的结果将是:
3 0.7
6 0.8
9 0.75
12 0.75
到目前为止,我已经设法将文件分成几个
awk 'NR%3==1{x="L"++i;}{print > x}' filename
然后找到每个文件中的最大值:
awk 'BEGIN{max=0}{if(($2)>max) max=($2)}END {print $1,max}'
然而,这会创建额外的文件,这对于这个例子来说很好,但实际上原始文件包含 6500 万行,所以我会被文件的数量有点不知所措,我试图通过编写一个简短的脚本来避免它将结合上面提到的两者。
我尝试过这个:
awk 'BEGIN {for (i=1; i<=12; i+=3) {max=0} {if(($2)>max) max=($2)}}END {print $1,max}' Filename
但它会产生一些不相关的东西。
如果您能帮助我,我将不胜感激!
最佳答案
你可以这样做:
awk 'NR % 3 == 1 || $2 > max {max = $2} NR % 3 == 0 {print $1, max}' file
max
的值始终每三行重置一次,如果第二列的值大于该值,则更新该值。在每三组的末尾,打印第一列和最大值。
关于arrays - 如何将文件拆分为数组并找到每个数组中的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30691511/