Erfahren Sie, wie Sie awk -Spezialmuster „Beginnen und Ende“ verwenden - Teil 9
- 1733
- 32
- Hr. Moritz Bozsik
In Teil 8 Von dieser AWK -Serie haben wir einige leistungsstarke AWK -Befehlsfunktionen vorgestellt, dh Variablen, numerische Ausdrücke und Zuweisungsoperatoren.
Während wir voranschreiten, werden wir in diesem Segment mehr abdecken Awk Merkmale, und das sind die besonderen Muster: START
Und ENDE
.
Diese Besonderheiten werden sich als hilfreich erweisen, wenn wir versuchen, weitere Methoden zum Komplex zu erweitern und zu erkunden Awk Operationen.
Lassen Sie uns unsere Gedanken wieder zur Einführung der Einführung des Awk Serie: Denken Sie daran, als wir diese Serie starteten, wies ich darauf hin, dass die allgemeine Syntax eines laufenden Eins ein Awk Befehl ist:
# awk 'Skript' Dateinamen
Und in der obigen Syntax die Awk Skript hat die Form:
/ Muster/ Aktionen
Wenn Sie das Muster im Skript betrachten, ist es normalerweise ein regulärer Ausdruck. Zusätzlich können Sie sich Muster auch als spezielle Muster vorstellen START
Und ENDE
. Deshalb können wir auch eine schreiben Awk Befehl in der folgenden Form:
awk 'begin actions / muster / actions / muster / actionen… . Ende Aktionen 'Dateinamen
Für den Fall, dass Sie die speziellen Muster verwenden: START
Und ENDE
in einem (n Awk Skript, das ist es, was jeder von ihnen bedeutet:
- Muster beginnen: bedeutet, dass awk die in angegebenen Aktionen ausführt START Einmal vor Eingabezeilen gelesen.
- Endmuster: bedeutet, dass awk die in angegebenen Aktionen ausführt ENDE Bevor es tatsächlich verlässt.
Und der Ausführungsfluss des a Awk Befehlskript, das diese speziellen Muster enthält, lautet wie folgt:
- Wenn das
START
Muster wird in einem Skript verwendet, alle Aktionen für START werden einmal ausgeführt, bevor eine Eingabezeile gelesen wird. - Dann wird eine Eingangslinie gelesen und in die verschiedenen Felder analysiert.
- Als nächstes wird jede der angegebenen nicht speziell angegebenen Muster mit der Eingangslinie für eine Übereinstimmung verglichen, wenn eine Übereinstimmung gefunden wird, die Aktionen für dieses Muster dann ausgeführt werden. Diese Phase wird für alle angegebenen Muster wiederholt.
- Als nächstes werden die Stufe 2 und 3 für alle Eingangsleitungen wiederholt.
- Wenn alle Eingabestellen gelesen und behandelt wurden, falls Sie das angeben
ENDE
Muster, die Aktionen werden ausgeführt.
Sie sollten sich immer an diese Ausführungsequenz erinnern, wenn Sie mit den speziellen Mustern arbeiten, um die besten Ergebnisse in einem zu erzielen Awk Betrieb.
Um alles zu verstehen, lassen Sie uns die Verwendung des Beispiels aus Teil 8 über die Liste der Domänen veranschaulichen Tecmint, wie in einer Datei namens gespeichert Domänen.txt.
Nachricht.Tecmint.Com Tecmint.com Linuxsay.com Windows.Tecmint.Com Tecmint.com Nachrichten.Tecmint.Com Tecmint.com Linuxsay.Com Tecmint.com Nachrichten.Tecmint.Com Tecmint.com Linuxsay.com Windows.Tecmint.Com Tecmint.com
$ cat ~/domains.txtInhalt der Datei anzeigen
In diesem Beispiel möchten wir die Häufigkeit der Domäne zählen Tecmint.com
ist in der Datei aufgeführt Domänen.txt. Deshalb haben wir ein kleines Shell -Skript geschrieben, um dies mithilfe der Idee von Variablen, numerischen Ausdrücken und Zuordnungsoperatoren zu tun, die den folgenden Inhalt haben:
#!/bin/bash für Datei in [E -Mail -geschützt]; tun, wenn [-f $ file]; dann #print out Dateiname echo "Datei lautet: $ file" #print eine Nummer inkrementell für jede Zeile mit Tecmint.com awk '/^tecmint.com/ counter+= 1; printf "%s \ n", Zähler; '$ file else #print fehlerinformationen infizierung ist keine Datei echo "$ -Datei ist keine Datei. Bitte geben Sie eine Datei an."> & 2 && Beenden 1 FI DEM #TERTEMINATE CRIPT mit Exit -Code 0 im Falle einer erfolgreichen Ausführung Exit 0
Lassen Sie uns nun die beiden besonderen Muster verwenden: START
Und ENDE
im Awk Befehl im obigen Skript wie folgt:
Wir werden das Skript ändern:
awk '/^tecmint.com/ counter+= 1; printf "%s \ n", Zähler; '$ Datei
Zu:
awk ' START drucken "die Anzahl der Tecmint.com erscheint in der Datei: "; /^tecmint.com/ counter+= 1; ENDE printf "%s \ n", Zähler; '$ Datei
Nachdem die Änderungen an der vorgenommen wurden Awk Befehl, das komplette Shell -Skript sieht jetzt so aus:
#!/bin/bash für Datei in [E -Mail -geschützt]; tun, wenn [-f $ file]; dann #print out Dateiname echo "Datei ist: $ file" #print Die Gesamtzeit ohne Tecmint.com erscheint in der Datei awk ' START drucken "die Anzahl der Tecmint.com erscheint in der Datei: "; /^tecmint.com/ counter+= 1; ENDE printf "%s \ n", Zähler; '$ file else #print fehlerinformationen infizierung ist keine Datei echo "$ -Datei ist keine Datei. Bitte geben Sie eine Datei an."> & 2 && Beenden 1 FI DEM #TERTEMINATE CRIPT mit Exit -Code 0 im Falle einer erfolgreichen Ausführung Exit 0Awk begin- und ende Muster
Wenn wir das Skript oben ausführen, druckt es zunächst den Speicherort der Datei Domänen.txt, dann ist die Awk Befehlskript wird ausgeführt, wo die START
Speziales Muster hilft uns, die Nachricht auszudrucken “Die Häufigkeit, mit der Tecmint.com erscheint in der Datei::
”Bevor Eingabestellen aus der Datei gelesen werden.
Dann unser Muster, /^tecmint.com/
wird mit jeder Eingangslinie und der Aktion verglichen, Zähler+= 1;
wird für jede Eingangsleitung ausgeführt, wodurch die Häufigkeit zählt Tecmint.com
wird in der Datei angezeigt.
Endlich, das ENDE
Das Muster druckt die Gesamtzahl der Häufigkeit der Domäne Tecmint.com
wird in der Datei angezeigt.
$ ./Skript.sh ~/domains.txtDas Skript zum Zählen der Häufigkeitsstring wird angezeigt
Abschließend gingen wir mehr durch Awk Features, die sich auf die Konzepte des besonderen Musters untersuchen: START
Und ENDE
.
Wie ich bereits erwähnt habe, können diese awk -Funktionen uns helfen, komplexere Textfiltervorgänge zu erstellen. Es gibt noch mehr zu verdecken Awk Funktionen und in Teil 10, Wir werden uns der Idee von awk eingebauten Variablen nähern. Bleiben Sie also in Verbindung.
- « So arbeiten Sie mit DNF -Paketgruppen
- So verwenden Sie den Befehl Suchen, um nach mehreren Dateinamen (Erweiterungen) unter Linux zu suchen »