awk '{ data[$1] = $0 } END { for (key in data) print data[key] }' file
Isso salvaria os dados de cada linha no array data
, digitado no primeiro campo. Quando outra linha com o mesmo primeiro campo é encontrada, os dados antigos dessa chave são simplesmente sobrescritos.
No final, todos os dados da matriz são exibidos.
Mais eficiente de memória:
sort -k1,1 -s file |
awk 'NR > 1 && $1 != key { print data } { data = $0; key = $1 } END { print data }'
Aqui, primeiro classificamos o arquivo apenas na primeira coluna, usando um algoritmo de classificação estável ( -s
). Usar um algoritmo de classificação estável significa que as linhas com a mesma chave não mudarão de posição em relação uma à outra na saída de sort
.
O código awk
só precisa manter o controle da "chave atual" e os dados mais recentes para essa chave, e para imprimir esses dados quando a chave for alterada (e no final).