【问题标题】:how to split file in arrays and find maximum value in each of them如何在数组中拆分文件并在每个数组中找到最大值
【发布时间】:2015-08-21 21:05:14
【问题描述】:

我有一个文件:

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 行,然后在每个数组的第二列中找到最大值。所以这个文件的结果是:

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

但它会产生一些无关紧要的东西。

如果您能帮助我,将不胜感激!

【问题讨论】:

    标签: arrays awk split max


    【解决方案1】:

    你可以这样做:

    awk 'NR % 3 == 1 || $2 > max {max = $2} NR % 3 == 0 {print $1, max}' file
    

    max 的值总是每三行重置一次,如果第二列的值大于它,则更新。在每三组结束时,打印第一列和最大值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-24
      • 1970-01-01
      • 1970-01-01
      • 2013-10-24
      • 1970-01-01
      • 2022-10-05
      相关资源
      最近更新 更多