Trovare campi duplicati con AWK

Questo programma di awk funziona soltanto per 1 file.

awk '(FNR==NR){a[$1]++; next} {if(a[$1]>1) print }' file1 file1
  • (condizione){blocco} è la sintassi per eseguire un blocco se è verificata la condizione tra parentesi tonde, linea per linea.
  • (FNR==NR) è un test per verificare di essere nel primo file: infatti FNR contiene il numero di linea nel file corrente, mentre NR è il numero di linea dell’ input cumulativo di tutti i file. NFR viene resettato a 1 in ogni file, mentre NR viene sempre incrementato.
  • {a[$1]++; next} viene eseguito solo per il primo file (condizione precedente soddisfatta).
    viene creata una array associativa con chiave il campo $1: se il campo $1 ha dei duplicati nelle seguenti linee, il valore di a[$1] viene incrementato di volta in volta.
    in definitiva, la array a avrà tutti valori 1 per i campi non duplicati, e un valore >1 pari al numero delle ripetizioni per i campi duplicati.
    Il comando next fa si che si passi alla riga successiva senza eseguire ulteriori operazioni sul RECORD: di conseguenza il blocco a destra non viene eseguito.
  • {if(a[$1]>1) print } è il blocco che viene eseguito sul secondo file, perchè viene escluso per il primo file dal comando next.
    Per ogni riga del secondo file si verifica che il campo $1 abbia una ripetizione e la si stampa in output.

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...