Rimuovi linea se il campo è duplicato

Alla ricerca di un awk (o sed) one-liner per rimuovere le linee dall’output se il primo campo è un duplicato.

Un esempio per rimuovere le linee duplicate che ho visto è:

awk 'a !~ $0; {a=$0}' 

Ho provato a usarlo per una base senza fortuna (pensavo che cambiare gli $ 0 a $ 1 avrebbe fatto il trucco, ma non sembrava funzionare).

 awk '{ if (a[$1]++ == 0) print $0; }' "[email protected]" 

Questo è un uso standard (molto semplice) per gli array associativi.

questo è come rimuovere i duplicati

 awk '!_[$1]++' file 

Se sei aperto all’utilizzo di Perl:

 perl -ane 'print if ! $a{$F[0]}++' file 

-a autosplit della linea nell’array @F , che viene indicizzato a partire da 0
Il %a hash ricorda se il primo campo è già stato visto


Questa soluzione correlata presuppone che il separatore di campo sia una virgola, piuttosto che uno spazio bianco

 perl -F, -ane 'print if ! $a{$F[0]}++' file