Classificar com base em diferentes campos e valores

1

Eu tenho os seguintes dados:

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

Eu quero selecionar as linhas com o maior valor com base na terceira coluna para os ids exclusivos na primeira coluna, mas manter as duplicatas para o maior valor para cada id na primeira coluna, por exemplo:

AD12      Ar.7       495
AD12      Ar.6       495
AD12      Ar.5       495
AD13      Ar2.1      495

Não sei como fazer isso, tentei comandos de classificação diferentes, por exemplo: sort -r -k3,3 -k1,1, mas não funcionou. Alguma sugestão?

    
por Paul 08.11.2017 / 16:49

1 resposta

1
Solução

sort + awk :

sort -k1,1 -k3,3nr <file | awk '!a[$1]{ a[$1]=$3 }$3==a[$1]'
  • sort -k1,1 -k3,3nr - classifica as linhas pelo primeiro campo (ordenação normal) e pelo terceiro campo (numericamente em ordem inversa)

  • !a[$1]{ a[$1]=$3 }$3==a[$1] - para cada id único $1 verifique se o registro atual tem o mesmo valor máximo $3

A saída:

AD12      Ar.5       495
AD12      Ar.6       495
AD12      Ar.7       495
AD13      Ar2.1      495
    
por 08.11.2017 / 17:44

Tags