So verwenden Sie Flusssteuerungsanweisungen in awk - Teil 12
- 3548
- 271
- Levke Harnapp
Wenn Sie alle Beispiele, die wir bisher bis zum Beginn der AWK -Serie bisher behandelt haben, überprüfen, werden Sie feststellen, dass alle Befehle in den verschiedenen Beispielen nacheinander ausgeführt werden. In bestimmten Situationen möchten wir jedoch einige Textfiltervorgänge anhand einiger Bedingungen ausführen.
Verwenden Sie Flusssteuerungsanweisungen in awkEs gibt verschiedene Anweisungen zur Durchflussregelung in der awk -Programmierung, und dazu gehören:
- IF-ELSE-Aussage
- Für Erklärung
- Während der Aussage
- DO-während
- Break -Erklärung
- Fortsetzung der Erklärung
- Nächste Aussage
- NEXTFILE ARSICHT
- Aussagenerklärung
Für den Umfang dieser Serie werden wir jedoch nachgeben: ansonsten
, für
, während
Und tu während
Aussagen. Denken Sie daran, dass wir bereits in Teil 6 dieser AWK -Serie die nächste Anweisung verwendet haben.
1. Die IF-ELSE-Anweisung
Die erwartete Syntax der wenn Anweisung
ist ähnlich wie bei der Schale wenn Anweisung:
if (condition1) actions1 else actions2
In der obigen Syntax, Bedingung1
Und Bedingung2
sind awk Ausdruck und Aktionen1
Und Aktionen2
Werden awk -Befehle ausgeführt, wenn die jeweiligen Bedingungen erfüllt sind.
Wenn Bedingung1 ist zufrieden, was bedeutet, dass es wahr ist, dann Aktionen1 wird ausgeführt und die wenn Anweisung Ausgänge, sonst Aktionen2 wird ausgeführt.
Der wenn Anweisung kann auch auf a erweitert werden If-ELSE_IF-ELSE
Aussage wie unten:
if (condition1) actions1 else if (Bedingungen2) actions2 else actions3
Für die obige Form, wenn Bedingung1 ist dann wahr, dann Aktionen1 wird ausgeführt und die wenn Anweisung Ausgänge, sonst Bedingung2 wird bewertet und wenn es wahr ist, dann wird dann Aktionen2 wird ausgeführt und die wenn Anweisung Ausgänge. Allerdings wann Bedingung2 ist dann falsch, Aktionen3 wird ausgeführt und die wenn Anweisung Ausgänge.
Hier ist ein Fall, bei dem Sie verwendet werden Wenn Aussagen, Wir haben eine Liste von Benutzer und ihre Alter in der Datei gespeichert, Benutzer.txt.
Wir möchten eine Anweisung drucken, die den Namen eines Benutzers angibt und ob das Alter des Benutzers geringer oder mehr ist als 25 Jahre alt.
[E -Mail geschützt] ~ $ Katzenbenutzer.txt Sarah L 35 F Aaron Kili 40 M John Doo 20 m Kili Seth 49 m
Wir können ein kurzes Shell -Skript schreiben, um unseren Job oben auszuführen. Hier ist der Inhalt des Skripts:
#!/bin/bash awk 'if ($ 3 <= 25 ) print "User",$1,$2,"is less than 25 years old." ; else print "User",$1,$2,"is more than 25 years old" ; ' ~/users.txt
Speichern Sie dann die Datei und beenden Sie das Skript ausführbar und führen Sie sie wie folgt aus:
$ chmod +x Test.Sh $ ./prüfen.Sch
Probenausgabe
Benutzer Sarah L ist mehr als 25 Jahre alter Benutzer Aaron Kili ist mehr als 25 Jahre alter Benutzer John Doo ist weniger als 25 Jahre alt. Benutzer Kili Seth ist mehr als 25 Jahre alt
2. Die für die Aussage
Falls Sie einige awk -Befehle in einer Schleife ausführen möchten, dann die dann die Für Erklärung bietet Ihnen eine geeignete Möglichkeit, dies zu tun, mit der folgenden Syntax:
Hier wird der Ansatz einfach durch die Verwendung eines Zählers zur Steuerung der Schleifenausführung definiert. Zuerst müssen Sie den Zähler initialisieren und dann gegen eine Testbedingung ausführen, falls er wahr ist, die Aktionen ausführen und schließlich den Zähler erhöhen. Die Schleife endet, wenn der Zähler den Zustand nicht erfüllt.
für (Gegeninitialisierung; Test-Kondition; Gegeninkrement) Aktionen
Der folgende awk -Befehl zeigt, wie der Für Erklärung funktioniert, wo wir die Zahlen drucken möchten 0-10:
$ awk 'begin für (counter = 0; counter<=10;counter++) print counter '
Probenausgabe
0 1 2 3 4 5 6 7 8 9 10
3. Die while -Aussage
Die konventionelle Syntax der Während der Aussage ist wie folgt:
while (Bedingung) Aktionen
Die Bedingung ist ein awk -Ausdruck und Aktionen sind Zeilen von awk -Befehlen, die ausgeführt werden, wenn die Bedingung wahr ist.
Unten ist ein Skript, um die Verwendung von zu veranschaulichen Während der Aussage um die Zahlen zu drucken 0-10:
#!/bin/bash awk 'begin counter = 0; während (Zähler<=10) print counter; counter+=1 ;
Speichern Sie die Datei und führen Sie das Skript aus, und führen Sie sie aus:
$ chmod +x Test.Sh $ ./prüfen.Sch
Probenausgabe
0 1 2 3 4 5 6 7 8 9 10
4. Die Do während der Erklärung
Es ist eine Modifikation der Während der Aussage Oben mit der folgenden zugrunde liegenden Syntax:
Aktionen während (Bedingung)
Der geringfügige Unterschied ist, dass unter tu während, Die awk -Befehle werden ausgeführt, bevor die Bedingung bewertet wird. Verwenden des Beispiels unter Während der Aussage Oben können wir die Verwendung von veranschaulichen tu während Durch Ändern des awk -Befehls in der prüfen.Sch Skript wie folgt:
#!/bin/bash awk 'begin counter = 0; Do Print Counter; Zähler+= 1; während (Zähler<=10) '
Speichern Sie nach der Änderung des Skripts die Datei und beenden Sie. Machen Sie dann das Skript ausführbar und führen Sie es wie folgt aus:
$ chmod +x Test.Sh $ ./prüfen.Sch
Probenausgabe
0 1 2 3 4 5 6 7 8 9 10
Abschluss
Dies ist keine umfassende Anleitung zu Aussagen der Flusskontrolle, wie ich bereits erwähnt hatte, es gibt mehrere andere Durchflussregelungsanweisungen in awk.
Dieser Teil der AWK -Serie sollte Ihnen jedoch eine klare grundlegende Vorstellung davon geben, wie die Ausführung von awk -Befehlen basierend auf bestimmten Bedingungen gesteuert werden kann.
Sie können auch mehr über den Rest der Flusskontrollanweisungen erläutern, um mehr Verständnis für den Gegenstand zu erlangen. Schließlich werden wir im nächsten Abschnitt der AWK -Serie in das Schreiben von awk -Skripten eingehen.
- « Debian GNU/Linux Geburtstag Eine 23 Jahre Reise und immer noch zählen…
- So verwalten Systemprotokolle (konfigurieren, drehen und in die Datenbank importieren) in RHEL 7 - Teil 5 »