Eu tenho um arquivo contendo vários campos:
12345 some values here
67890 other values maybe
12345 different values here
...etc.
Eu gostaria de exibir a linha mais recente para cada chave. A saída deve ser a seguinte:
67890 other values maybe
12345 different values here
Na saída, as chaves devem ser exclusivas e os valores (o restante da linha) devem ser os mais recentes vistos para essa chave. Eu particularmente não me importo com a ordem resultante das chaves.
Como posso fazer isso usando ferramentas GNU (ou POSIX)?
Isso salvaria os dados de cada linha no array
data
, digitados no primeiro campo. Quando outra linha com o mesmo primeiro campo é encontrada, os dados antigos dessa chave são simplesmente substituídos.No final, todos os dados da matriz são emitidos.
Mais memória eficiente:
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 umas às outras na saída desort
.O
awk
código, então, só precisa acompanhar a "chave atual" e os dados mais recentes dessa chave e imprimir esses dados quando a chave for alterada (e no final).Eu reverteria o arquivo, produziria cada linha na primeira vez que fosse vista e, em seguida, reverteria a saída