GNU/Linux >> LINUX-Kenntnisse >  >> Linux

7 Beispiele für leistungsstarke Awk-Operatoren (Unäre, Binäre, Arithmetische, String-, Zuweisungs-, Bedingungs-, Reg-Ex-Awk-Operatoren)

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.

  1. Unärer Operator – Operator, der einen einzelnen Operanden akzeptiert, wird unärer Operator genannt.
  2. 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

Sed- und Awk-101-Hacks, von Ramesh Natarajan . Ich verbringe mehrere Stunden am Tag in einer UNIX/Linux-Umgebung mit dem Umgang mit Textdateien (Daten-, Konfigurations- und Protokolldateien). Ich verwende Sed und Awk für alle meine Textbearbeitungsarbeiten. Basierend auf meiner Sed- und Awk-Erfahrung habe ich das Sed and Awk 101 Hacks eBook geschrieben, das 101 praktische Beispiele zu verschiedenen erweiterten Funktionen von Sed und Awk enthält, die Ihr UNIX / Linux-Leben verbessern werden. Auch wenn Sie Sed und Awk seit mehreren Jahren verwenden und dieses Buch noch nicht gelesen haben, tun Sie sich bitte einen Gefallen und lesen Sie dieses Buch. Sie werden von den Möglichkeiten der Dienstprogramme Sed und Awk begeistert sein.


Linux
  1. Erste Schritte mit awk, einem leistungsstarken Textparsing-Tool

  2. 6 Beispiele für bedingte Bash-Ausdrücke ( -e, -eq, -z, !=, [, [[ ..)

  3. 7 Beispiele für Linux-Operatoren Grep OR, Grep AND, Grep NOT

  4. 6 Verkettungsoperatoren für Bash-Shell-Befehlszeilen unter Linux

  5. awk-Befehlsbeispiele unter Linux

AWK-Befehl in Linux mit Beispielen

Linux/UNIX Awk Command Tutorial mit Beispielen

Linux-awk-Befehl mit 10 Beispielen

Bash-Anfängerserie Nr. 5:Verwenden von arithmetischen Operatoren in Bash-Skripten

Regex-Tutorial für Linux-Beispiele (Sed &AWK).

Linux-Shell-Scripting:Hexadezimalzahl in Binärzeichenfolge