我有一个表格文件,其中第一列有 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