maximum of column com id correspondente

4

Eu tenho um arquivo com os seguintes campos

NM001 rp1 210
NM003 rp1 220
NM005 rag 200
NM004 rag 100

Eu gostaria de ter uma saída que, para cada alteração na coluna2, encontre o máximo na coluna4, mas também relate a coluna correspondente1. Até agora, encontrei uma solução que relata column2 e 3, mas não column1, porque o número na coluna1 é diferente. Eu gosto de usar awk por favor.

A saída deve ser

NM003 rp1 220
NM005 rag 200
    
por tihon 15.07.2011 / 09:35

2 respostas

4

Você pode fazer isso facilmente com o awk.

Você precisa acompanhar o valor máximo de cada valor na segunda coluna e também manter toda a linha para cada um que tenha o valor máximo:

awk '
    $3 > maxvals[$2] {lines[$2]=$0; maxvals[$2]=$3}
    END { for (tag in lines) print lines[tag] }
'

A saída não está classificada, por isso canalize para sort se você precisar de uma classificação específica.

    
por 15.07.2011 / 12:19
1

Experimente as ferramentas sort e uniq :

sort -k3,3nr infile |
awk '{ print $1" " $3" " $2 }' | 
uniq -f2 | awk '{ print $1" " $3" " $2 }' > outfile
    
por 15.07.2011 / 11:19

Tags