
Ich bin vor kurzem auf ein awk gestoßengesehenOption. Ich sehe, dass es Duplikate in Dateien entfernt. Ich könnte eine Erklärung gebrauchen, wie es funktioniert.
cat tes
1
2
3
1
1
1
3
4
mit awk gesehene Ausgabe
cat tes | awk '!seen[$0]++'
1
2
3
4
Antwort1
seen
ist der beliebige Name eines assoziativen Arrays. Es handelt sich hierbei nicht um eine Option. Sie können stattdessen a
oder oder die meisten anderen Namen verwenden.b
Der Code !seen[$0]++
besteht aus einem Test und einem Inkrement.
Wenn seen[$0]
, also der Wert des Array-Elements, das mit dem Schlüssel $0
, der aktuellen Eingabezeile, verknüpft ist, Null (oder leer) ist, dann !seen[$0]
ist der Boolesche Wert vonWAHR.
Der dem Schlüssel entsprechende Wert im Array $0
wird dann erhöht, was bedeutet, dass der TestFALSCHalle anderen Male, wenn der gleiche Wert $0
gefunden wird.
Der Effekt ist, dass der TestWAHRdas erste Mal, dass eine bestimmte Zeile in der Eingabe erscheint, undFALSCHzu allen anderen Zeiten.
Wenn ein Test ohne zugehörige AktionWAHR, DieStandardAktion wird ausgelöst. Die Standardaktion ist das Äquivalent von { print }
oder { print $0 }
, wodurch der aktuelle Datensatz gedruckt wird, der in diesem Beispiel für alle Konten und Zwecke die aktuelle, unveränderte Eingabezeile ist.