Dieser Artikel ist Teil der fortlaufenden Reihe von Awk-Tutorial-Beispielen. In unseren früheren awk-Artikeln haben wir über awk print, benutzerdefinierte awk-Variablen und eingebaute awk-Variablen gesprochen.
Wie jede andere Programmiersprache hat auch Awk viele Operatoren für Zahlen- und Zeichenkettenoperationen. Lassen Sie uns in diesem Artikel über alle wichtigen awk-Operatoren sprechen .
Es gibt zwei Arten von Operatoren in Awk.
- Unärer Operator – Operator, der einen einzelnen Operanden akzeptiert, wird unärer Operator genannt.
- Binäroperator – Operator, der mehr als einen Operanden akzeptiert, wird Binäroperator genannt.
Awk Unärer Operator
Operator | Beschreibung |
+ | Positivieren Sie die Zahl |
– | Negiere die Zahl |
++ | AutoInkrement |
— | AutoDecrement |
Awk-Binäroperator
In Awk sind verschiedene Arten von binären Operatoren verfügbar. Es wird basierend auf seiner Verwendung klassifiziert.
Awk Arithmetische Operatoren
Die folgenden Operatoren werden zur Durchführung arithmetischer Berechnungen verwendet.
Operator | Beschreibung |
+ | Zusatz |
– | Subtraktion |
* | Multiplikation |
/ | Abteilung |
% | Modulo-Division |
Awk-String-Operator
Für die String-Verkettung hat Awk die folgenden Operatoren.
Operator | Beschreibung |
(Leerzeichen) | String-Verkettung |
Awk-Zuweisungsoperatoren
Awk hat den Zuweisungsoperator und den Shortcut-Zuweisungsoperator, wie unten aufgeführt.
Operator | Beschreibung |
= | Zuweisung |
+= | Schnellzuweisung |
-= | Shortcut-Subtraktionszuweisung |
*= | Verkürzte Multiplikationszuweisung |
/= | Abkürzung für Abteilungszuweisung |
%= | Verkürzte Modulo-Divisionszuweisung |
Awk-Bedingungsoperatoren
Awk hat die folgende Liste von Bedingungsoperatoren, die mit Kontrollstrukturen und Schleifenanweisungen verwendet werden können, die im nächsten Artikel behandelt werden.
Operator | Beschreibung |
> | Ist größer als |
>= | Ist größer oder gleich |
< | Ist kleiner als |
<= | Ist kleiner oder gleich |
<= | Ist kleiner oder gleich |
== | Ist gleich |
!= | Ist nicht gleich |
&& | Beide Bedingungsausdrücke sollten wahr sein |
|| | Jeder Bedingungsausdruck sollte wahr sein |
Awk-Operator für reguläre Ausdrücke
Operator | Beschreibung |
~ | Match-Operator |
!~ | No-Match-Operator |
Beispiele für Awk-Operatoren
Sehen wir uns nun einige Beispiele an, die awk-Operatoren verwenden. Lassen Sie uns in diesen Beispielen /etc/passwd als Eingabedatei verwenden.
$ cat /etc/passwd gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh libuuid:x:100:101::/var/lib/libuuid:/bin/sh syslog:x:101:102::/home/syslog:/bin/false hplip:x:103:7:HPLIP system user,,,:/var/run/hplip:/bin/false saned:x:110:116::/home/saned:/bin/false pulse:x:111:117:PulseAudio daemon,,,:/var/run/pulse:/bin/false gdm:x:112:119:Gnome Display Manager:/var/lib/gdm:/bin/false
Awk Beispiel 1:Zählen Sie die Gesamtzahl der Felder in einer Datei.
Das folgende awk-Skript stimmt mit allen Zeilen überein und fügt die Anzahl der Felder in jeder Zeile mit dem Verknüpfungszuweisungsoperator hinzu. Die Anzahl der bisher gesehenen Felder wird in einer Variablen namens „Gesamt“ gespeichert. Sobald die Eingabe verarbeitet wurde, wird das spezielle Muster „END {…}“ ausgeführt, das die Gesamtzahl der Felder ausgibt.
$ awk -F ':' '{ total += NF }; END { print total }' /etc/passwd 49
Awk-Beispiel 2:Anzahl der Benutzer zählen, die die /bin/sh-Shell verwenden
Im folgenden awk-Skript stimmt es mit dem letzten Feld aller Zeilen überein, die das Muster /bin/sh enthalten. Reguläre Ausdrücke sollten zwischen // geschlossen werden. Daher muss der gesamte Frontslash (/) im regulären Ausdruck maskiert werden. Wenn eine Zeile übereinstimmt, wird die Variable „n“ um eins erhöht. Gibt den Wert des ‚n‘ im END-Abschnitt aus.
$ awk -F ':' '$NF ~ /\/bin\/sh/ { n++ }; END { print n }' /etc/passwd 2
Awk Beispiel 3:Finden Sie die Benutzerdetails, die die höchste BENUTZER-ID haben
Das folgende awk-Skript verfolgt die größte Zahl im Feld in der Variablen „maxuid“ und die entsprechende Zeile wird in der Variablen „maxline“ gespeichert. Sobald es alle Zeilen durchlaufen hat, gibt es sie aus.
$ awk -F ':' '$3 > maxuid { maxuid=$3; maxline=$0 }; END { print maxuid, maxline }' /etc/passwd 112 gdm:x:112:119:Gnome Display Manager:/var/lib/gdm:/bin/false
Awk-Beispiel 4:Die geraden Zeilen drucken
Das folgende awk-Skript verarbeitet jede Zeile und prüft NR % 2 ==0, d. h. ob NR ein Vielfaches von 2 ist. Es führt die Standardoperation aus, die die gesamte Zeile druckt.
$ awk 'NR % 2 == 0' /etc/passwd libuuid:x:100:101::/var/lib/libuuid:/bin/sh hplip:x:103:7:HPLIP system user,,,:/var/run/hplip:/bin/false pulse:x:111:117:PulseAudio daemon,,,:/var/run/pulse:/bin/false
Awk Beispiel 5. Jede Zeile drucken, die dieselbe USER ID und GROUP ID hat
Das folgende awk-Skript gibt die Zeile nur aus, wenn $3(USER ID) und $4(GROUP ID) gleich sind. Es überprüft diese Bedingung für jede Eingabezeile, wenn sie übereinstimmt, wird die ganze Zeile gedruckt.
$awk -F ':' '$3==$4' passwd.txt gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
Awk-Beispiel 6:Benutzerdetails drucken, die eine BENUTZER-ID größer oder gleich 100 haben und /bin/sh verwenden müssen
In der folgenden Awk-Anweisung gibt es zwei bedingte Ausdrücke, einer ist die Benutzer-ID ($3) größer oder gleich 100, und der zweite ist das letzte Feld, das mit /bin/sh übereinstimmen sollte, '&&' soll nur gedruckt werden, wenn beides oben ist Bedingungen sind wahr.
$ awk -F ':' '$3>=100 && $NF ~ /\/bin\/sh/' passwd.txt libuuid:x:100:101::/var/lib/libuuid:/bin/sh
Awk-Beispiel 7:Benutzerdetails drucken, die keine Kommentare in der /etc/passwd-Datei haben
Das folgende Awk-Skript liest jede Zeile und prüft, ob das fünfte Feld leer ist, wenn es leer ist, druckt es die Zeile.
$awk -F ':' '$5 == "" ' passwd.txt libuuid:x:100:101::/var/lib/libuuid:/bin/sh syslog:x:101:102::/home/syslog:/bin/false saned:x:110:116::/home/saned:/bin/false
Empfohlene Lektüre