So verwenden Sie den Befehl nächster mit awk unter Linux - Teil 6

So verwenden Sie den Befehl nächster mit awk unter Linux - Teil 6

In diesem sechsten Teil der AWK -Serie werden wir uns ansehen nächste Befehl, der erzählt Awk So überspringen Sie alle verbleibenden Muster und Ausdrücke, die Sie zur Verfügung gestellt haben, sondern lesen Sie stattdessen die nächste Eingangslinie.

Der nächste Der Befehl hilft Ihnen, zu verhindern, dass das Ausführen dessen, was ich als Zeitverwirrungsschritte in einer Befehlsausführung bezeichnen würde, ausführen würde.

Um zu verstehen, wie es funktioniert, betrachten wir eine Datei mit dem Namen food_list.txt Das sieht so aus:

Lebensmittellistenartikel
NO item_name Preis Menge 1 Mangos $ 3.45 5 2 Äpfel $ 2.45 25 3 Ananas $ 4.45 55 4 Tomaten $ 3.45 25 5 Zwiebeln $ 1.45 15 6 Bananen $ 3.45 30 

Erwägen Sie, den folgenden Befehl auszuführen, der Lebensmittel kennzeichnet, deren Menge geringer ist als oder gleich 20 mit einem (*) Unterschreiben Sie am Ende jeder Zeile:

# awk '$ 4 20 drucken $ 0;' food_list.txt NO item_name Preis Menge 1 Mangos $ 3.45 5 * 2 Äpfel $ 2.45 25 3 Ananas $ 4.45 55 4 Tomaten $ 3.45 25 5 Zwiebeln $ 1.45 15 * 6 Bananen $ 3.45 30 

Der obige Befehl funktioniert tatsächlich wie folgt:

  1. Erstens überprüft es, ob die Menge und das vierte Feld jeder Eingangsleitung geringer als oder gleich 20, Wenn ein Wert auf diese Bedingung erfüllt, wird er mit dem gedruckt und gekennzeichnet (*) Unter Verwendung des Ausdrucks eins signieren: $ 4 <= 20
  2. Zweitens überprüft es, ob das vierte Feld jeder Eingangsleitung größer ist als 20, und wenn eine Linie den Zustand erfüllt, wird sie mit Ausdruck zwei gedruckt: $ 4> 20

Aber hier gibt es ein Problem, wenn die erster Ausdruck Es wird ausgeführt, eine Zeile, die wir flecken möchten, wird mit: gedruckt: printf "%s \ t%s \ n", $ 0, "**"; und dann im gleichen Schritt die Zweiter Ausdruck wird auch überprüft, was zu einem Zeitverschwendungsfaktor wird.

Es besteht also keine Notwendigkeit, den zweiten Ausdruck auszuführen, $ 4> 20 Wieder nach dem Drucken bereits markierter Linien, die mit dem ersten Ausdruck gedruckt wurden.

Um mit diesem Problem umzugehen, müssen Sie die verwenden nächste Befehl wie folgt:

# awk '$ 4 20 drucken $ 0;' food_list.txt NO item_name Preis Menge 1 Mangos $ 3.45 5 * 2 Äpfel $ 2.45 25 3 Ananas $ 4.45 55 4 Tomaten $ 3.45 25 5 Zwiebeln $ 1.45 15 * 6 Bananen $ 3.45 30 

Nachdem eine einzelne Eingangslinie verwendet wurde $ 4 <= 20 printf "%s \ t%s \ n", $ 0, "*"; nächste ; , Die nächste Der enthaltene Befehl hilft dabei, den zweiten Ausdruck zu überspringen $ 4> 20 Druck $ 0;, Die Ausführung geht also an die nächste Eingangslinie, ohne Zeit damit verschwenden zu müssen, ob die Menge größer ist als 20.

Der nächste Der Befehl ist sehr wichtig ist, effiziente Befehle zu schreiben. Bei Bedarf können Sie immer die Ausführung eines Skripts beschleunigen. Bereiten Sie sich auf den nächsten Teil der Serie vor, in dem wir die Verwendung von Standardeingaben verwenden werden (Stdin) als Eingabe für Awk.

Ich hoffe, Sie finden dies, wie Sie hilfreich sind, und Sie können Ihre Gedanken wie immer schriftlich einsetzen, indem Sie einen Kommentar im Kommentarbereich unten hinterlassen.