Heim  >  Artikel  >  System-Tutorial  >  Musterfiltermethode für Text oder Zeichenfolge mit awk

Musterfiltermethode für Text oder Zeichenfolge mit awk

王林
王林nach vorne
2023-12-30 15:02:15701Durchsuche

Beim Filtern von Text möchten Sie manchmal bestimmte Zeilen in einer Datei oder Zeichenfolge basierend auf einer bestimmten Bedingung markieren oder ein bestimmtes Muster verwenden, das abgeglichen werden kann. Es ist sehr einfach, diese Aufgabe mit awk zu erledigen, und es ist eine der wenigen Funktionen von awk, die Ihnen helfen können.

Musterfiltermethode für Text oder Zeichenfolge mit awk

Sehen wir uns das folgende Beispiel an. Sie haben eine Einkaufsliste mit den Lebensmitteln, die Sie kaufen möchten. Die Liste lautet: food_prices.list

$ cat food_prices.list Nr. Item_Name Mengenpreis 1 Mangos 10 2,45 $ 2 Äpfel 20 1,50 $ 3 Bananen 5 0,90 $ 4 Ananas 10 3,46 $ 5 Orangen 10 0,78 $ 6 Tomaten 5 0,55 $ 7 Zwiebeln 5 0,45 $

Dann möchten Sie ein (*)-Symbol verwenden, um Lebensmittel mit einem Stückpreis von mehr als 2 $ zu kennzeichnen. Dann können Sie dies tun, indem Sie den folgenden Befehl ausführen:

$ awk '/ */$[2-9]/.[0-9][0-9] */ { print $1, $2, $3, $4, "*" } / */$[0-1 ]/.[0-9][0-9] */ { print }' food_prices.list

Musterfiltermethode für Text oder Zeichenfolge mit awk

Drucken Sie Artikel mit einem Stückpreis von mehr als 2 $

Aus der obigen Ausgabe können Sie ersehen, dass sich am Ende der Zeile, die Mango und Ananas enthält, eine Markierung (*) befindet. Wenn Sie den Preis pro Einheit überprüfen, können Sie sehen, dass sie tatsächlich über 2 US-Dollar pro Einheit liegen.

In diesem Beispiel haben wir zwei Modi verwendet:

Das erste Muster: / */$[2-9]/.[0-9][0-9] */ ruft die Zeilen ab, die Lebensmittel mit einem Stückpreis von mehr als 2 $ enthalten.

Das zweite Muster: /*/$[0-1]/.[0-9][0-9] */ findet Zeilen, in denen der Stückpreis für Lebensmittel weniger als 2 $ beträgt.

Was genau bewirkt der obige Befehl? Diese Datei enthält vier Felder, wenn das Muster mit einer Zeile übereinstimmt, die einen Lebensmittelstückpreis von mehr als 2 $ enthält, werden alle vier Felder ausgegeben und die Zeile am Ende mit einem (*) markiert.

Der zweite Modus gibt einfach die anderen Zeilen aus, die Lebensmittel mit Stückpreisen von weniger als 2 $ enthalten, so wie sie in der Eingabedatei food_prices.list erscheinen.

Auf diese Weise können Sie das Muster verwenden, um Lebensmittel herauszufiltern, die mehr als 2 $ kosten. Obwohl es bei der obigen Ausgabe ein Problem gibt, sind die Zeilen mit dem (*)-Symbol nicht wie die anderen Zeilen formatiert, wodurch die Ausgabe erfolgt erscheinen nicht klar genug.

Das gleiche Problem haben wir auch im zweiten Teil der awk-Reihe gesehen, können es aber auf zwei Arten lösen:

1. Sie können den printf-Befehl wie folgt verwenden, aber er ist langwierig und langweilig:

$ awk '/ */$[2-9]/.[0-9][0-9] */ { printf "%-10s %-10s %-10s %-10s/n", $1, $2, $3, $4 "*" ; } / */$[0-1]/.[0-9][0-9] */ { printf "%-10s %-10s %-10s %-10s/n", 1 $, 2 $, 3 $, 4 $; }' food_prices.list

Musterfiltermethode für Text oder Zeichenfolge mit awk

Verwenden Sie Awk und Printf, um Projekte zu filtern und auszugeben

2. Verwenden Sie das Feld „$0“. Awk verwendet die Variable

0, um die gesamte Eingabezeile zu speichern. Für das oben genannte Problem ist diese Methode sehr praktisch und außerdem einfach und schnell:

$ awk '/ */$[2-9]/.[0-9][0-9] */ { print $0 "*" } / */$[0-1]/.[0-9 ][0-9] */ { print }' food_prices.list

Musterfiltermethode für Text oder Zeichenfolge mit awk

Verwenden Sie Awk und Variablen, um Elemente zu filtern und auszugeben

Fazit

Das ist alles: Mit dem Befehl awk können Sie den Mustervergleich verwenden, um Text auf verschiedene einfache Arten zu filtern und so bestimmte Textzeilen oder Zeichenfolgen in einer Datei zu markieren.

Das obige ist der detaillierte Inhalt vonMusterfiltermethode für Text oder Zeichenfolge mit awk. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:jb51.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen