Website-Suche

So verwenden Sie den Befehl „next“ mit Awk unter Linux – Teil 6


In diesem sechsten Teil der Awk-Reihe werden wir uns mit der Verwendung des Befehls next befassen, der Awk anweist, alle verbleibenden Muster und Ausdrücke, die Sie bereitgestellt haben, zu überspringen und stattdessen den nächsten zu lesen Eingabezeile.

Der Befehl next hilft Ihnen dabei, die Ausführung dessen zu verhindern, was ich als zeitraubende Schritte bei der Befehlsausführung bezeichnen würde.

Um zu verstehen, wie es funktioniert, betrachten wir eine Datei namens food_list.txt, die so aussieht:

No      Item_Name               Price           Quantity
1       Mangoes                 $3.45              5
2       Apples                  $2.45              25
3       Pineapples              $4.45              55
4       Tomatoes                $3.45              25
5       Onions                  $1.45              15
6       Bananas                 $3.45              30

Erwägen Sie die Ausführung des folgenden Befehls, der Lebensmittel, deren Menge kleiner oder gleich 20 ist, mit einem (*)-Zeichen am Ende jeder Zeile kennzeichnet:

# awk '$4 <= 20 { printf "%s\t%s\n", $0,"*" ; } $4 > 20 { print $0 ;} ' food_list.txt 

No	Item_Name		Price		Quantity
1	Mangoes			$3.45		   5	*
2	Apples			$2.45              25
3	Pineapples		$4.45              55
4	Tomatoes		$3.45              25 
5	Onions			$1.45              15	*
6	Bananas	                $3.45              30

Der obige Befehl funktioniert tatsächlich wie folgt:

  1. Zunächst wird geprüft, ob die Menge im vierten Feld jeder Eingabezeile kleiner oder gleich 20 ist. Wenn ein Wert diese Bedingung erfüllt, wird er gedruckt und mit dem (*) gekennzeichnet -Zeichen am Ende mit Ausdruck eins: $4 <= 20
  2. Zweitens prüft es, ob das vierte Feld jeder Eingabezeile größer als 20 ist, und wenn eine Zeile die Bedingung erfüllt, wird sie mit Ausdruck zwei gedruckt: $4 > 20

Hier gibt es jedoch ein Problem: Wenn der erste Ausdruck ausgeführt wird, wird eine Zeile, die wir kennzeichnen möchten, gedruckt mit: { printf "%s\t%s\n", $0, „**“ ; und dann wird im selben Schritt auch der zweite Ausdruck überprüft, was zu einem zeitraubenden Faktor wird.

Es besteht also keine Notwendigkeit, den zweiten Ausdruck $4 > 20 erneut auszuführen, nachdem bereits markierte Zeilen gedruckt wurden, die mit dem ersten Ausdruck gedruckt wurden.

Um dieses Problem zu lösen, müssen Sie den Befehl next wie folgt verwenden:

# awk '$4 <= 20 { printf "%s\t%s\n", $0,"*" ; next; } $4 > 20 { print $0 ;} ' food_list.txt

No	Item_Name		Price		Quantity
1	Mangoes			$3.45		   5	*
2	Apples			$2.45              25
3	Pineapples		$4.45              55
4	Tomatoes		$3.45              25 
5	Onions			$1.45              15	*
6	Bananas	                $3.45              30

Nachdem eine einzelne Eingabezeile mit $4 <= 20 { printf "%s\t%s\n", $0,"*" gedruckt wurde; nächste ; , der enthaltene Befehl next hilft dabei, den zweiten Ausdruck $4 > 20 { print $0 ;} zu überspringen, sodass die Ausführung mit fortfährt in die nächste Eingabezeile, ohne zeitraubend prüfen zu müssen, ob die Menge größer als 20 ist.

Der Befehl next ist sehr wichtig für das Schreiben effizienter Befehle und kann bei Bedarf jederzeit verwendet werden, um die Ausführung eines Skripts zu beschleunigen. Bereiten Sie sich auf den nächsten Teil der Serie vor, in dem wir uns mit der Verwendung der Standardeingabe (STDIN) als Eingabe für Awk befassen.

Ich hoffe, Sie finden diesen Leitfaden hilfreich und können Ihre Gedanken wie immer schriftlich niederlegen, indem Sie im Kommentarbereich unten einen Kommentar hinterlassen.