Der Befehl awk ist eine leistungsstarke Methode zum Verarbeiten oder Analysieren von Textdateien, insbesondere Datendateien, die nach Zeilen (Zeilen) und Spalten organisiert sind.
Einfach awk Befehle können von der Befehlszeile aus ausgeführt werden. Komplexere Aufgaben sollten als awk-Programme (sogenannte awk-Skripte) in eine Datei geschrieben werden.
Das grundlegende Format eines awk-Befehls sieht folgendermaßen aus:
awk 'pattern {action}' Eingabedatei> Ausgabedatei
Das bedeutet: Nehmen Sie jede Zeile der Eingabedatei; Wenn die Zeile das Muster enthält, wenden Sie die Aktion auf die Zeile an und schreiben Sie die resultierende Zeile in die Ausgabedatei. Wenn das Muster weggelassen wird, wird die Aktion auf alle Zeilen angewendet. Zum Beispiel: awk '{print $ 5}' table1.txt> output1.txt Diese Anweisung nimmt das Element der 5. Spalte jeder Zeile und schreibt es als Zeile in die Ausgabedatei "output.txt". Die Variable '$ 4' bezieht sich auf die zweite Spalte. In ähnlicher Weise können Sie auf die erste, zweite und dritte Spalte mit $ 1, $ 2, $ 3 usw. zugreifen. Standardmäßig wird davon ausgegangen, dass Spalten durch Leerzeichen oder Tabulatoren (so genannte Leerzeichen) getrennt sind. Wenn also die Eingabedatei "table1.txt" folgende Zeilen enthält: 1, Justin Timberlake, Titel 545, Preis 7,30 $2, Taylor Swift, Titel 723, Preis 7,90 $3, Mick Jagger, Titel 610, Preis 7,90 $4, Lady Gaga, Titel 118, Preis 7,30 $5, Johnny Cash, Titel 482, Preis 6,50 $6, Elvis Presley, Titel 335, Preis 7,30 $7, John Lennon, Titel 271, Preis 7,90 $8, Michael Jackson, Titel 373, Preis 5,50 $ Dann würde der Befehl die folgenden Zeilen in die Ausgabedatei "output1.txt" schreiben: 545,723,610,118,482,335,271,373, Wenn das Spaltentrennzeichen etwas anderes als Leerzeichen oder Tabulatoren ist, beispielsweise ein Komma, können Sie dies in der awk-Anweisung folgendermaßen angeben: awk -F, '{print $ 3}' table1.txt> output1.txt Dadurch wird das Element aus Spalte 3 jeder Zeile ausgewählt, wenn die Spalten als durch ein Komma getrennt betrachtet werden. Die Ausgabe wäre in diesem Fall also: Titel 545 Titel 723 Titel 610 Titel 118 Titel 482 Titel 335 Titel 271 Titel 373 Die Liste der Anweisungen in den geschweiften Klammern ('{', '}') wird als Block bezeichnet. Wenn Sie einen bedingten Ausdruck vor einen Block setzen, wird die Anweisung innerhalb des Blocks nur ausgeführt, wenn die Bedingung wahr ist. awk '$ 7 == " $ 7,30" {print $ 3}' table1.txt In diesem Fall lautet die Bedingung $ 7 == " $ 7,30", was bedeutet, dass das Element in Spalte 7 $ 7,30 entspricht. Der umgekehrte Schrägstrich vor dem Dollarzeichen wird verwendet, um zu verhindern, dass das System $ 7 als Variable interpretiert und stattdessen das Dollarzeichen wörtlich nimmt. Diese awk-Anweisung gibt also das Element in der 3. Spalte jeder Zeile aus, die in Spalte 7 "7,30 $" hat. Sie können auch reguläre Ausdrücke als Bedingung verwenden. Zum Beispiel: awk '/ 30 / {print $ 3}' table1.txt Die Zeichenfolge zwischen den beiden Schrägstrichen ('/') ist der reguläre Ausdruck. In diesem Fall ist es nur die Zeichenfolge "30". Das heißt, wenn eine Zeile die Zeichenfolge "30" enthält, druckt das System das Element in der 3. Spalte dieser Zeile aus. Die Ausgabe in dem obigen Beispiel wäre: Timberlake, Gaga, Presley, Wenn die Tabellenelemente Zahlen sind, kann awk wie im folgenden Beispiel Berechnungen ausführen: awk '{print ($ 2 * $ 3) + $ 7}' Neben den Variablen, die auf Elemente der aktuellen Zeile zugreifen ($ 1, $ 2 usw.), gibt es die Variable $ 0, die sich auf die vollständige Zeile (Zeile) bezieht, und die Variable NF, die sich auf die Anzahl der Felder bezieht. Sie können auch neue Variablen wie in diesem Beispiel definieren: awk '{sum = 0; für (col = 1; col <= NF; col ++) summe + = $ col; Drucksumme; } ' Dadurch wird die Summe aller Elemente jeder Zeile berechnet und gedruckt. Awk-Anweisungen werden häufig mit sed-Befehlen kombiniert.




