Dieser Einzeiler entfernt doppelte Zeilen aus der Texteingabe ohne Vorsortierung.
Beispielsweise:
$ cat >f
q
w
e
w
r
$ awk '!a[$0]++' <f
q
w
e
r
$
Der Originalcode, den ich auf den Internets gefunden habe, lautete:
awk '!_[$0]++'
Dies war für mich noch verwirrender, als ich _
eine besondere Bedeutung in awk annahm, wie in Perl, aber es stellte sich heraus, dass es sich nur um den Namen eines Arrays handelte.
Jetzt verstehe ich die Logik hinter dem Einzeiler : Jede Eingabezeile wird als Schlüssel in einem Hash-Array verwendet, daher enthält der Hash nach Fertigstellung eindeutige Zeilen in der Reihenfolge des Eintreffens.
Was ich lernen möchte, ist, wie genau diese Notation von awk interpretiert wird. ZB was das Bang-Zeichen ( !
) bedeutet und die anderen Elemente dieses Code-Snippets.
Wie funktioniert es?