Questo one-liner rimuove le righe duplicate dall'inserimento del testo senza pre-ordinamento.
Per esempio:
$ cat >f
q
w
e
w
r
$ awk '!a[$0]++' <f
q
w
e
r
$
Il codice originale che ho trovato su Internet recita:
awk '!_[$0]++'
Questo è stato ancora più sconcertante per me dato che ho assunto _
un significato speciale in awk, come in Perl, ma si è rivelato essere solo un nome di un array.
Ora capisco la logica dietro il one-liner: ogni riga di input viene utilizzata come chiave in un array di hash, quindi, al termine, l'hash contiene righe uniche nell'ordine di arrivo.
Quello che vorrei imparare è come esattamente questa notazione è interpretata da awk. Ad esempio, ciò che significa il segno di botto ( !
) e gli altri elementi di questo frammento di codice.
Come funziona?