Se você for fazer um segundo passe (o que você precisa muito bem), você também pode armazenar números de linha em vez de registros completos. Isso torna a lógica mais fácil.
awk 'NR == FNR {if (z[$6]) y[z[$6]]; z[$6] = FNR; next} !(FNR in y)' logfile logfile
Prova de exatidão:
No final do processamento de cada linha, cada número de linha processado até agora é um valor em z
, ou um índice (não valor) em y
, mas nunca os dois.
As linhas representadas por valores em z
são, no final de cada iteração, exatamente e somente os registros mais recentes até agora vistos para cada endereço IP.
Os índices de y
são, portanto, as linhas exatas que desejamos que não sejam impressas.