根据不同的字段和值进行排序

根据不同的字段和值进行排序

我有以下数据:

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

相关内容