过滤给定 ID 具有最大值的行

过滤给定 ID 具有最大值的行

我有一个表格文件,其中第一列有 ID,第二列有数值。我需要生成一个文件,其中仅包含每个 ID 得分最高的行。

所以,我想采取这个:

ES.001      2.33
ES.001      1.39
ES.001    119.55
ES.001     14.55
ES.073      0.35
ES.073     17.95
ES.140      1.14
ES.140     53.88
ES.140     18.28
ES.178    150.27

并生成这个:

ES.001    119.55
ES.073     17.95
ES.140     53.88
ES.178    150.27

有没有办法从 bash 命令行执行此操作?

答案1

用于sort按第一个字段排序,然后按第二个字段按数字降序排序。使用 Awk 仅打印每个不同的第一个字段值的第一行。

sort -k1,1 -k2rn inputfile | awk '!a[$1]++'

答案2

根据数据类型,排序可能需要很长时间。我们无需排序(但使用更多内存)即可获得结果,如下所示:

awk 'a[$1]<$2{a[$1]=$2}END{for(i in a){print(i,a[i])}}' infile

相关内容