Website-Suche

Verwendung von Vergleichsoperatoren mit Awk unter Linux – Teil 4


Beim Umgang mit numerischen Werten oder Zeichenfolgenwerten in einer Textzeile ist das Filtern von Text oder Zeichenfolgen mithilfe von Vergleichsoperatoren für Benutzer des Awk-Befehls praktisch.

In diesem Teil der Awk-Reihe werfen wir einen Blick darauf, wie Sie Text oder Zeichenfolgen mithilfe von Vergleichsoperatoren filtern können. Wenn Sie Programmierer sind, müssen Sie bereits mit Vergleichsoperatoren vertraut sein. Diejenigen, die es nicht sind, erkläre ich Ihnen im folgenden Abschnitt.

Was sind Vergleichsoperatoren in Awk?

Vergleichsoperatoren in Awk werden zum Vergleichen des Werts von Zahlen oder Zeichenfolgen verwendet und umfassen Folgendes:

  1. > – größer als
  2. < – kleiner als
  3. >= – größer oder gleich
  4. <= – kleiner oder gleich
  5. == – gleich
  6. != – ungleich
  7. some_value ~/pattern/ – wahr, wenn some_value mit dem Muster übereinstimmt
  8. some_value !~/pattern/ – wahr, wenn some_value nicht mit dem Muster übereinstimmt

Nachdem wir uns nun die verschiedenen Vergleichsoperatoren in Awk angesehen haben, wollen wir sie anhand eines Beispiels besser verstehen.

In diesem Beispiel haben wir eine Datei mit dem Namen food_list.txt, die eine Einkaufsliste für verschiedene Lebensmittel ist, und ich möchte Lebensmittel kennzeichnen, deren Menge kleiner oder gleich 20 ist, indem ich ( **) am Ende jeder Zeile.

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

Die allgemeine Syntax für die Verwendung von Vergleichsoperatoren in Awk lautet:

expression { actions; }

Um das oben genannte Ziel zu erreichen, muss ich den folgenden Befehl ausführen:

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

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

Im obigen Beispiel passieren zwei wichtige Dinge:

  1. Der erste Ausdruck { action ; Kombination, $3 <= 30 { printf „%s\t%s\n“, $0“,**“ ; druckt Zeilen mit einer Menge kleiner oder gleich 30 aus und fügt am Ende jeder Zeile ein (**) hinzu. Auf den Mengenwert wird über die Feldvariable $3 zugegriffen.
  2. Der zweite Ausdruck { action ; -Kombination, $3 > 30 { print $0 ;} druckt Zeilen unverändert aus, da ihre Anzahl größer als 30 ist.

Noch ein Beispiel:

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

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

In diesem Beispiel möchten wir Zeilen mit einer Menge kleiner oder gleich 20 mit dem Wort (TRUE) am Ende kennzeichnen.

Zusammenfassung

Dies ist ein Einführungstutorial zu Vergleichsoperatoren in Awk. Sie müssen daher viele andere Optionen ausprobieren und mehr entdecken.

Wenn Sie auf Probleme stoßen oder Ergänzungen im Sinn haben, hinterlassen Sie einen Kommentar im Kommentarbereich unten. Denken Sie daran, den nächsten Teil der Awk-Reihe zu lesen, in dem ich Sie durch zusammengesetzte Ausdrücke führe.