Dependendo do tipo de dados, a classificação pode levar muito tempo. Podemos obter o resultado sem ordenar (mas usando mais memória) assim:
awk 'a[$1]<$2{a[$1]=$2}END{for(i in a){print(i,a[i])}}' infile
Eu tenho um arquivo tabular no qual a primeira coluna tem IDs e a segunda tem valores numéricos. Eu preciso gerar um arquivo que contenha apenas a linha com a maior pontuação para cada ID.
Então, eu quero entender isso:
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
E gere isso:
ES.001 119.55
ES.073 17.95
ES.140 53.88
ES.178 150.27
Existe uma maneira de fazer isso a partir de uma linha de comando bash?
Use sort
para classificá-los pelo primeiro campo e, depois, pelo segundo campo em ordem numérica descendente. Use o Awk para imprimir apenas a primeira linha para cada primeiro valor de campo distinto.
sort -k1,1 -k2rn inputfile | awk '!a[$1]++'