我有以下数据:
AD12 Ar.1 352
AD12 Ar.7 495
AD12 Ar.8 491
AD12 Ar.6 495
AD12 Ar.5 495
AD12 Ar.9 491
AD13 Ar2.1 495
我想根据第一列中唯一 id 的第三列选择具有最高值的行,但保留第一列中每个 id 的最高值的重复项,例如:
AD12 Ar.7 495
AD12 Ar.6 495
AD12 Ar.5 495
AD13 Ar2.1 495
我不知道该怎么做,我尝试了不同的排序命令,例如:sort -r -k3,3 -k1,1,但没有用。有什么建议么?
答案1
sort
+awk
解决方案:
sort -k1,1 -k3,3nr <file | awk '!a[$1]{ a[$1]=$3 }$3==a[$1]'
sort -k1,1 -k3,3nr
- 按第一个字段(常规排序)和第三个字段(数字相反的顺序)对行进行排序!a[$1]{ a[$1]=$3 }$3==a[$1]
- 对于每个独特的ID$1
检查当前记录是否具有相同的最大值$3
输出:
AD12 Ar.5 495
AD12 Ar.6 495
AD12 Ar.7 495
AD13 Ar2.1 495