Website-Suche

So verwenden Sie Flusssteuerungsanweisungen in Awk - Teil 12


Wenn Sie sich alle Awk-Beispiele ansehen, die wir bisher behandelt haben, werden Sie feststellen, dass alle Befehle in den verschiedenen Beispielen nacheinander, d.h. nacheinander, ausgeführt werden.

In bestimmten Situationen möchten wir jedoch möglicherweise einige Textfiltervorgänge basierend auf bestimmten Bedingungen ausführen, und hier kommt der Ansatz von Flusssteuerungsanweisungen ins Spiel.

In der Awk-Programmierung gibt es verschiedene Flusssteuerungsanweisungen, darunter:

  • if-else-Anweisung
  • for-Anweisung
  • while-Anweisung
  • do-while-Anweisung
  • break-Anweisung
  • continue-Anweisung
  • nächste Aussage
  • nextfile-Anweisung
  • exit-Anweisung

Für den Umfang dieser Serie werden wir jedoch folgende Aussagen erläutern: if-else, for, while und do while. Denken Sie daran, dass wir bereits in Teil 6 dieser Awk-Serie durch die Verwendung der nächsten Anweisung gegangen sind.

1. Die if-else-Anweisung

Die erwartete Syntax der if-Anweisung ähnelt der der if-Anweisung der Shell:

if  (condition1) {
     actions1
}
else {
      actions2
}

In der obigen Syntax sind condition1 und condition2 Awk-Ausdrücke, und actions1 und actions2 sind Awk-Befehle, die ausgeführt werden, wenn die jeweiligen Bedingungen erfüllt sind.

Wenn Bedingung1 erfüllt ist, d. h. wahr ist, wird actions1 ausgeführt und die if-Anweisung wird beendet, andernfalls wird actions2 ausgeführt.

Die if-Anweisung kann auch wie folgt zu einer if-else_if-else-Anweisung erweitert werden:

if (condition1){
     actions1
}
else if (conditions2){
      actions2
}
else{
     actions3
}

Wenn in dieser Form condition1 true ist, wird actions1 ausgeführt und die if-Anweisung wird beendet, andernfalls wird condition2 ausgewertet und wenn sie true ist, wird actions2 ausgeführt und die if-Anweisung wird beendet. Wenn jedoch condition2 false ist, wird actions3 ausgeführt und die if-Anweisung beendet.

Hier ist ein typisches Beispiel für die Verwendung von if-Anweisungen, wir haben eine Liste von Benutzern und deren Alter in der Datei users.txt gespeichert.

Sarah L			35    	F
Aaron Kili		40    	M
John  Doo		20    	M
Kili  Seth		49    	M    

Wir möchten eine Aussage drucken, die den Namen eines Benutzers angibt und angibt, ob der Benutzer weniger oder mehr als 25 Jahre alt ist.

Wir können ein kurzes Shell-Skript schreiben, um unsere obige Arbeit 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 sie, machen Sie das Skript ausführbar, und führen Sie es wie folgt aus:

chmod +x test.sh
./test.sh

Beispiel-Ausgabe:

User Sarah L is more than 25 years old
User Aaron Kili is more than 25 years old
User John Doo is less than 25 years old.
User Kili Seth is more than 25 years old

2. Die for-Erklärung

Falls Sie einige Awk-Befehle in einer Schleife ausführen möchten, bietet Ihnen die for-Anweisung eine geeignete Möglichkeit, dies zu tun, mit der folgenden Syntax:

for ( counter-initialization; test-condition; counter-increment ){
      actions
}

Hier wird der Ansatz einfach durch die Verwendung eines Zählers definiert, um die Ausführung der Schleife zu steuern: Zuerst müssen Sie den Zähler initialisieren, ihn dann gegen eine Testbedingung ausführen, wenn sie wahr ist, die Aktionen ausführen und schließlich den Zähler inkrementieren. Die Schleife wird beendet, wenn der Zähler die Bedingung nicht erfüllt.

Der folgende Awk-Befehl zeigt, wie die for-Anweisung funktioniert, bei der wir die Zahlen 0-10 ausgeben wollen:

awk 'BEGIN{ for(counter=0;counter<=10;counter++){ print counter} }'

Beispiel-Ausgabe:

0
1
2
3
4
5
6
7
8
9
10

3. Die while-Anweisung

Die herkömmliche Syntax der while-Anweisung lautet wie folgt:

while ( condition ) {
          actions
}

Die Bedingung ist ein Awk-Ausdruck, und Aktionen sind Zeilen von Awk-Befehlen, die ausgeführt werden, wenn die Bedingung wahr ist.

Im Folgenden finden Sie ein Skript, um die Verwendung der while-Anweisung zum Drucken der Zahlen 0-10 zu veranschaulichen:

#!/bin/bash
awk ' BEGIN{ counter=0 ;
         
        while(counter<=10){
              print counter;
              counter+=1 ;
             
}
}  

Speichern Sie die Datei, machen Sie das Skript ausführbar, und führen Sie es dann aus:

chmod +x test.sh
./test.sh

Beispiel-Ausgabe:

0
1
2
3
4
5
6
7
8
9
10

4. Die do while-Anweisung

Die do-while-Anweisung ist eine Modifikation der while-Anweisung mit der folgenden Syntax:

do {
     actions
}
 while (condition) 

Der kleine Unterschied besteht darin, dass unter do while die Awk-Befehle ausgeführt werden, bevor die Bedingung ausgewertet wird. Anhand des obigen Beispiels unter while-Anweisung können wir die Verwendung von do while veranschaulichen, indem wir den Befehl Awk im test.sh-Skript wie folgt ändern:

#!/bin/bash

awk ' BEGIN{ counter=0 ;  
        do{
            print counter;  
            counter+=1 ;    
        }
        while (counter<=10)   
} 
'

Nachdem Sie das Skript geändert haben, speichern Sie die Datei und beenden Sie das Programm. Machen Sie dann das Skript ausführbar und führen Sie es wie folgt aus:

chmod +x test.sh
./test.sh

Beispiel-Ausgabe:

0
1
2
3
4
5
6
7
8
9
10
Schlussfolgerung

Dies ist kein umfassender Leitfaden für Awk-Flusssteuerungsanweisungen, da es bereits mehrere andere Flusssteuerungsanweisungen in Awk gibt.

Nichtsdestotrotz soll Ihnen dieser Teil der Awk-Serie eine klare grundlegende Vorstellung davon geben, wie die Ausführung von Awk-Befehlen auf der Grundlage bestimmter Bedingungen gesteuert werden kann.

Sie können auch den Rest der Flusssteuerungsanweisungen näher erläutern, um ein besseres Verständnis des Themas zu erlangen. Im nächsten Abschnitt der Awk-Serie werden wir uns schließlich dem Schreiben von Awk-Skripten zuwenden.

Für diejenigen, die eine umfassende Ressource suchen, haben wir alle Artikel der Awk-Serie in einem Buch zusammengestellt, das 13 Kapitel umfasst und sich über 41 Seiten erstreckt und sowohl die grundlegende als auch die fortgeschrittene Verwendung von Awk mit praktischen Beispielen abdeckt.

ProduktnamePreisKaufen
E-Book: Einführung in den AWK-Leitfaden für Anfänger8,99 $[Jetzt kaufen]

Verwandte Artikel: