
Dies ist der erste Artikel in der neuen awk-Tutorial-Serie. Wir werden in den kommenden Wochen mehrere Artikel auf awk veröffentlichen, die alle Funktionen von awk mit praktischen Beispielen behandeln.
Lassen Sie uns in diesem Artikel die grundlegende awk-Arbeitsmethodik zusammen mit 7 praktischen awk-Druckbeispielen besprechen.
Hinweis: Sehen Sie sich unbedingt unsere frühere Sed-Tutorial-Reihe an.
Awk-Einführung und Druckvorgänge
Awk ist eine Programmiersprache, die eine einfache Bearbeitung strukturierter Daten und die Generierung formatierter Berichte ermöglicht. Awk steht für die Namen seiner Autoren „A ho, W Einberger und K ernighan“
Das Awk wird hauptsächlich zum Scannen und Verarbeiten von Mustern verwendet. Es durchsucht eine oder mehrere Dateien, um festzustellen, ob sie Zeilen enthalten, die mit den angegebenen Mustern übereinstimmen, und führt dann die zugehörigen Aktionen aus.
Einige der Schlüsselfunktionen von Awk sind:
- Awk betrachtet eine Textdatei als Datensätze und Felder.
- Wie eine gewöhnliche Programmiersprache hat Awk Variablen, Bedingungen und Schleifen
- Awk hat arithmetische und Zeichenkettenoperatoren.
- Awk kann formatierte Berichte erstellen
Awk liest aus einer Datei oder von seiner Standardeingabe und gibt an seiner Standardausgabe aus. Awk kommt nicht mit Nicht-Text-Dateien zurecht.
Syntax: awk '/search pattern1/ {Actions} /search pattern2/ {Actions}' file
In der obigen awk-Syntax:
- Suchmuster ist ein regulärer Ausdruck.
- Aktionen – auszuführende Anweisung(en).
- verschiedene Muster und Aktionen sind in Awk möglich.
- file – Eingabedatei.
- Einfache Anführungszeichen um das Programm sollen verhindern, dass die Shell keine ihrer Sonderzeichen interpretiert.
Awk-Arbeitsmethodik
- Awk liest die Eingabedateien zeilenweise.
- Für jede Zeile stimmt es mit dem angegebenen Muster in der angegebenen Reihenfolge überein, wenn Übereinstimmungen die entsprechende Aktion ausführen.
- Wenn kein Muster übereinstimmt, wird keine Aktion ausgeführt.
- In der obigen Syntax sind entweder Suchmuster oder Aktion optional, aber nicht beides.
- Wenn das Suchmuster nicht angegeben ist, führt Awk die angegebenen Aktionen für jede Zeile der Eingabe aus.
- Wenn die Aktion nicht angegeben ist, werden alle Zeilen ausgegeben, die mit den angegebenen Mustern übereinstimmen, was die Standardaktion ist.
- Leere Klammern ohne Aktion bewirken nichts. Es wird keine standardmäßige Druckoperation ausgeführt.
- Jede Anweisung in Aktionen sollte durch Semikolon getrennt werden.
Lassen Sie uns eine employee.txt-Datei mit folgendem Inhalt erstellen, die in den
unten erwähnten Beispielen verwendet wird.
$cat employee.txt 100 Thomas Manager Sales $5,000 200 Jason Developer Technology $5,500 300 Sanjay Sysadmin Technology $7,000 400 Nisha Manager Marketing $9,500 500 Randy DBA Technology $6,000
Awk-Beispiel 1. Standardverhalten von Awk
Standardmäßig druckt Awk jede Zeile aus der Datei.
$ awk '{print;}' employee.txt 100 Thomas Manager Sales $5,000 200 Jason Developer Technology $5,500 300 Sanjay Sysadmin Technology $7,000 400 Nisha Manager Marketing $9,500 500 Randy DBA Technology $6,000
Im obigen Beispiel ist kein Muster angegeben. Die Aktionen gelten also für alle Zeilen.
Aktion print ohne Argument druckt standardmäßig die ganze Zeile. Es werden also alle
Zeilen der Datei fehlerfrei gedruckt. Aktionen müssen mit in geschweiften Klammern eingeschlossen werden.
Awk Beispiel 2. Drucken Sie die Linien, die mit dem Muster übereinstimmen.
$ awk '/Thomas/ > /Nisha/' employee.txt 100 Thomas Manager Sales $5,000 400 Nisha Manager Marketing $9,500
Im obigen Beispiel werden alle Zeilen gedruckt, die mit „Thomas“ oder „Nisha“ übereinstimmen. Es hat zwei Muster. Awk akzeptiert eine beliebige Anzahl von Mustern, aber jeder Satz (Muster und die entsprechenden Aktionen) muss durch Zeilenumbruch getrennt werden.
Awk Beispiel 3. Nur bestimmtes Feld drucken.
Awk hat eine Reihe von eingebauten Variablen. Für jeden Datensatz, d. h. jede Zeile, wird der Datensatz standardmäßig durch Leerzeichen getrennt und in den $n-Variablen gespeichert. Wenn die Zeile 4 Wörter hat, wird sie in $1, $2, $3 und $4 gespeichert. $0 steht für eine ganze Zeile. NF ist eine eingebaute Variable, die die Gesamtzahl der Felder in einem Datensatz darstellt.
$ awk '{print $2,$5;}' employee.txt Thomas $5,000 Jason $5,500 Sanjay $7,000 Nisha $9,500 Randy $6,000 $ awk '{print $2,$NF;}' employee.txt Thomas $5,000 Jason $5,500 Sanjay $7,000 Nisha $9,500 Randy $6,000
Im obigen Beispiel stehen $2 und $5 für Name bzw. Gehalt. Wir können das Gehalt auch mit $NF erhalten, wobei $NF das letzte Feld darstellt. In der Druckanweisung ist „,“ ein Verkettungselement.
Awk-Beispiel 4. Initialisierung und letzte Aktion
Awk hat zwei wichtige Muster, die durch die Schlüsselwörter BEGIN und END angegeben werden.
Syntax: BEGIN { Actions} {ACTION} # Action for everyline in a file END { Actions } # is for comments in Awk
Aktionen, die im BEGIN-Abschnitt angegeben sind, werden ausgeführt, bevor mit dem Lesen der Zeilen aus der Eingabe begonnen wird.
END-Aktionen werden ausgeführt, nachdem das Lesen und Verarbeiten der Zeilen aus der Eingabe abgeschlossen ist.
$ awk 'BEGIN {print "Name\tDesignation\tDepartment\tSalary";} > {print $2,"\t",$3,"\t",$4,"\t",$NF;} > END{print "Report Generated\n--------------"; > }' employee.txt Name Designation Department Salary Thomas Manager Sales $5,000 Jason Developer Technology $5,500 Sanjay Sysadmin Technology $7,000 Nisha Manager Marketing $9,500 Randy DBA Technology $6,000 Report Generated --------------
Im obigen Beispiel druckt es die Überschrift und die letzte Datei für die Berichte.
Awk Beispiel 5. Finden Sie die Mitarbeiter, deren Mitarbeiter-ID größer als 200 ist
$ awk '$1 >200' employee.txt 300 Sanjay Sysadmin Technology $7,000 400 Nisha Manager Marketing $9,500 500 Randy DBA Technology $6,000
Im obigen Beispiel ist das erste Feld ($1) die Mitarbeiter-ID. Wenn also $1 größer als 200 ist, dann führe einfach die standardmäßige Druckaktion aus, um die ganze Zeile zu drucken.
Awk Beispiel 6. Drucken Sie die Liste der Mitarbeiter in der Technologieabteilung
Jetzt ist der Abteilungsname als viertes Feld verfügbar, also müssen Sie prüfen, ob $4 mit der Zeichenfolge „Technologie“ übereinstimmt, wenn ja, drucken Sie die Zeile.
$ awk '$4 ~/Technology/' employee.txt 200 Jason Developer Technology $5,500 300 Sanjay Sysadmin Technology $7,000 500 Randy DBA Technology $6,000
Der Operator ~ dient zum Vergleichen mit den regulären Ausdrücken. Wenn es mit der Standardaktion übereinstimmt, d. h. ganze Zeile drucken, wird ausgeführt.
Awk Beispiel 7. Anzahl der Mitarbeiter in der Technologieabteilung drucken
Das folgende Beispiel prüft, ob die Abteilung Technologie ist, wenn ja, inkrementieren Sie in der Aktion einfach die Zählvariable, die im BEGIN-Abschnitt mit Null initialisiert wurde.
$ awk 'BEGIN { count=0;} $4 ~ /Technology/ { count++; } END { print "Number of employees in Technology Dept =",count;}' employee.txt Number of employees in Tehcnology Dept = 3
Drucken Sie dann am Ende des Prozesses einfach den Wert von count aus, der Ihnen die Anzahl der Mitarbeiter in der Technologieabteilung gibt.
Empfohlene Lektüre
Sed- und Awk-101-Hacks, von Ramesh Natarajan . Ich verbringe mehrere Stunden am Tag in einer UNIX/Linux-Umgebung mit dem Umgang mit Textdateien (Daten-, Konfigurations- und Protokolldateien). Ich verwende Sed und Awk für alle meine Textbearbeitungsarbeiten. Basierend auf meiner Sed- und Awk-Erfahrung habe ich das Sed and Awk 101 Hacks eBook geschrieben, das 101 praktische Beispiele zu verschiedenen erweiterten Funktionen von Sed und Awk enthält, die Ihr UNIX / Linux-Leben verbessern werden. Auch wenn Sie Sed und Awk seit mehreren Jahren verwenden und dieses Buch noch nicht gelesen haben, tun Sie sich bitte einen Gefallen und lesen Sie dieses Buch. Sie werden von den Möglichkeiten der Dienstprogramme Sed und Awk begeistert sein.
Zusätzliche Awk-Artikel
- Awk benutzerdefinierte Variablen mit 3 praktischen Beispielen
- 8 leistungsstarke integrierte Awk-Variablen – FS, OFS, RS, ORS, NR, NF, FILENAME, FNR
- 7 Beispiele für leistungsstarke Awk-Operatoren (unäre, binäre, arithmetische, String-, Zuweisungs-, Bedingungs-, Reg-Ex-Awk-Operatoren)
- 4 Beispiele für Awk-If-Anweisungen ( if, if else, if else if, :? )
- In der Schleife gefangen? Awk While, Do While, For Loop, Break, Continue, Exit Beispiele