arrays - 如何将文件拆分为数组并找到每个数组中的最大值

标签 arrays awk split max

我有一个文件:

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/

相关文章:

arrays - 如何将对象添加到数组的顶部位置?

arrays - 有没有办法获取对象中属性值的数组?

c++ - Arduino - 从实例创建数组并赋值 [C++]

linux - awk 根据条件打印特定列

linux - AWK 根据另一个文件的列过滤一个文件

python - 用数字来拆分字符串

go - strings.Split 从不返回 nil 或零长度 slice ?

javascript - 如何在javascript中加载二维数组

bash - awk:意外标记附近的语法错误 `('

python - 如何在 django 中分离我的模型?