Wie beherrscht man den AWK-Befehl zum Verarbeiten von Texten unter Linux?

Der AWK-Befehl ist ein leistungsstarkes und vielseitiges Tool zum Verarbeiten und Transformieren von Textdaten unter Linux. Ob Sie Informationen extrahieren, Zeilen filtern, die Ausgabe neu formatieren oder Berechnungen durchführen – AWK kann Ihnen das Leben mit nur wenigen Codezeilen erleichtern. In diesem Artikel erfahren Sie, wie Sie den AWK-Befehl zur Textmanipulation unter Linux verwenden.

Was ist der AWK-Befehl?

Die AWK-Programmiersprache.svg

Der AWK-Befehl ist eine interpretierte Programmiersprache, die im Linux-Terminal ausgeführt wird. Sein Name leitet sich von den Initialen seiner Schöpfer ab: Alfred Aho, Peter Weinberger und Brian Kernighan. AWK wurde ursprünglich für die Verarbeitung von Dateien entwickelt, die in durch Trennzeichen getrennte Felder strukturiert sind, beispielsweise CSV-Dateien oder /etc/passwd-Dateien. Aber auch komplexere Textdateien wie HTML- oder XML-Dateien kann AWK verarbeiten. AWK ist keine objektorientierte Programmiersprache , ermöglicht jedoch die Definition lokaler oder globaler Funktionen und Variablen. Es verfügt auch über Kontrollstrukturen wie Schleifen und Bedingungen.

Die allgemeine Syntax des AWK-Befehls lautet wie folgt:

awk [Optionen] 'Programm' [Dateien]

Das Programm besteht aus einer Reihe von Anweisungen, die Muster definieren, nach denen in jeder Zeile der Datei , sowie Aktionen, die ausgeführt werden sollen, wenn ein Muster gefunden wird. den Optionen können Sie das Verhalten des AWK-Befehls ändern, beispielsweise die Wahl des Feldtrennzeichens oder das Ausgabeformat.

Wie drucke ich Text mit dem AWK-Befehl?

So verwenden Sie den Awk-Befehl unter Linux

Mit dem AWK-Befehl kann eine Nachricht basierend auf einem Muster im Text an das Terminal ausgegeben werden. Wenn Sie den AWK-Befehl ohne Angabe von Gründen und nur mit einem Druckbefehl ausführen, druckt AWK die Nachricht jedes Mal, wenn Sie die Eingabetaste drücken.

Wenn Sie beispielsweise Folgendes eingeben:

awk '{print "Hallo"}'

Und wenn Sie mehrmals die Eingabetaste drücken, erhalten Sie:

Guten Morgen, guten Morgen, guten Morgen

Um den AWK-Befehl zu stoppen, können Sie Strg+C drücken.

Wenn Sie den Inhalt einer Datei mit dem AWK-Befehl drucken möchten, können Sie das BEGIN , das vor dem Lesen der Datei ausgeführt wird, und das END , das nach dem Lesen der Datei ausgeführt wird. Wenn Sie beispielsweise eine Datei namens test.txt , die Folgendes enthält:

Dies ist ein Test. AWK ist ein großartiges Tool. Linux ist das beste Betriebssystem

Sie können den Inhalt der Datei mit dem folgenden Befehl drucken:

awk 'BEGIN {print "Hier ist der Inhalt der test.txt-Datei:"} {print} END {print "Ende der Datei"}' test.txt

Welche geben:

Hier ist der Inhalt der test.txt-Datei: Dies ist ein Test. AWK ist ein großartiges Tool. Linux ist das beste Betriebssystem. Ende der Datei

Befehl {print} ohne Argumente druckt die gesamte Zeile. Sie können ein bestimmtes Feld auch mit der $n , wobei n die Feldnummer ist. Standardmäßig werden Felder durch Leerzeichen oder Tabulatoren getrennt, Sie können das Trennzeichen jedoch mit der -F .

Wenn Sie beispielsweise das erste und dritte Feld der /etc/passwd , die durch einen Doppelpunkt ( :) , können Sie den folgenden Befehl verwenden:

awk -F: '{print $1 " " $3}' /etc/passwd

Was etwa Folgendes ergibt:

root 0 daemon 1 bin 2 sys 3 sync 4 games 5 man 6 lp 7 mail 8 news 9 uucp 10 Proxy 13 www-data 33 ...

Mit dem AWK-Befehl können Sie auch arithmetische Ausdrücke oder Zeichenfolgen drucken. Wenn Sie beispielsweise das Quadrat des zweiten Felds der test.txt , können Sie den folgenden Befehl verwenden:

awk '{print $2^2}' test.txt

Welche geben:

ist 16 ist

test.txt ausdrucken möchten , können Sie die spezielle Variable NR , die die Nummer der aktuellen Zeile enthält. Sie können beispielsweise den folgenden Befehl verwenden:

awk 'END {print NR}' test.txt

Welche geben:

3

Wie filtere ich Text mit dem AWK-Befehl?

dl.beatsnoop.com Daumen 1687289446

Mit dem AWK-Befehl kann Text nach Mustern oder Bedingungen gefiltert werden. Wenn Sie vor einer Aktion ein Muster angeben, führt AWK die Aktion nur aus, wenn das Muster in der Zeile gefunden wird. Das Muster kann ein regulärer Ausdruck, ein Vergleich, eine logische Operation oder eine Kombination davon sein.

Wenn Sie beispielsweise Zeilen aus der test.txt , die das Wort Linux , können Sie den folgenden Befehl verwenden:

awk '/Linux/ {print}' test.txt

Welche geben:

Linux ist das beste Betriebssystem

/etc/passwd drucken möchten, deren UID größer als 1000 ist, können Sie den folgenden Befehl verwenden:

awk -F: '$3 > 1000 {print}' /etc/passwd

Was etwa Folgendes ergibt:

systemd-coredump:x:997:997:systemd Core Dumper:/:/usr/sbin/nologin tss:x:131:142:TPM software stack,,,:/var/lib/tpm:/bin/false _rpc: x:132:65534::/run/rpcbind:/usr/sbin/nologin statd:x:133:65534::/var/lib/nfs:/usr/sbin/nologin libvirt-qemu:x:64055:139: Libvirt Qemu,,,:/var/lib/libvirt:/usr/sbin/nologin libvirt-dnsmasq:x:134:144:Libvirt Dnsmasq,,,:/var/lib/libvirt/dnsmasq:/usr/sbin/nologin snapd-range-524288-root:x:524288:524288::/nonexistent:/bin/false snap_daemon:x:584788:584788::/nonexistent:/bin/false ...

Sie können auch die logischen Operatoren && (und), || (oder) und ! (nein) um Muster zu kombinieren. Wenn Sie beispielsweise Zeilen aus der /etc/passwd , die eine UID größer als 1000 und eine andere Shell als /usr/sbin/nologin , können Sie den folgenden Befehl verwenden:

awk -F: '$3 > 1000 && $7 != "/usr/sbin/nologin" {print}' /etc/passwd

Kopieren

Was etwa Folgendes ergibt:

tss:x:131:142:TPM-Software-Stack,,,:/var/lib/tpm:/bin/false _rpc:x:132:65534::/run/rpcbind:/usr/sbin/nologin statd:x: 133:65534::/var/lib/nfs:/usr/sbin/nologin libvirt-qemu:x:64055:139:Libvirt Qemu,,,:/var/lib/libvirt:/usr/sbin/nologin libvirt-dnsmasq :x:134:144:Libvirt Dnsmasq,,,:/var/lib/libvirt/dnsmasq:/usr/sbin/nologin snapd-range-524288-root:x:524288:524288::/nonexistent:/bin/false snap_daemon:x:584788:584788::/nonexistent:/bin/false ...

Wie bearbeite ich Text mit dem AWK-Befehl?

dl.beatsnoop.com Daumen 1687289615

Mit dem AWK-Befehl kann Text mithilfe integrierter Funktionen oder spezieller Variablen geändert werden. Wenn Sie beispielsweise in der test.txt , können Sie die gsub , die alle Vorkommen einer Zeichenfolge durch eine andere ersetzt. Sie können auch die spezielle OFS- , die das Ausgabefeldtrennzeichen definiert. Sie können beispielsweise den folgenden Befehl verwenden:

awk '{print strftime("%d/%m/%Y %H:%M:%S",$1 " " $2)}' test.txt

Welche geben:

30/10/2021 16:13:49
31/10/2021 17:14:50
01/11/2021 18:15:51

Weitere verfügbare Funktionen und Variablen finden Sie im AWK-Befehlshandbuch.

Wie verwende ich eine for-Schleife mit dem AWK-Befehl?

Mit dem AWK-Befehl können for-Schleifen über Felder oder Zeilen in einer Datei ausgeführt werden. Die Syntax der for-Schleife lautet wie folgt:

für (Variable im Array) Aktion

Dabei Variable der Name der Variablen, die nacheinander die Werte aus dem Array , und Aktion ist die Aktion, die in jeder Iteration ausgeführt werden soll.

Wenn Sie beispielsweise die Felder einer Datei in umgekehrter Reihenfolge drucken möchten, können Sie die for-Schleife mit der speziellen Variablen NF , die die Anzahl der Felder in der aktuellen Zeile enthält. Wenn Sie beispielsweise über eine test.txt- , die Folgendes enthält:

Dies ist ein Test. AWK ist ein großartiges Tool. Linux ist das beste Betriebssystem

Sie können die Reihenfolge der Felder mit dem folgenden Befehl umkehren:

awk '{for (i=NF; i>0; i--) print $i}' test.txt

Welche geben:

Testen Sie eines: Dieses großartige Tool. Das eine ist das AWK-Betriebssystem, das beste ist Linux
dl.beatsnoop.com Daumen 1687289757

FNR- zu durchlaufen , die die Zeilennummer der aktuellen Datei enthält. Wenn Sie beispielsweise die geraden Zeilennummern der test.txt , können Sie den folgenden Befehl verwenden:

awk 'FNR%2==0 {print FNR}' test.txt

Welche geben:

2
4

Wie führe ich ein AWK-Skript aus?

Erweiterung .awk chmod +x Ausführungsrechte erteilen . ./script_name.awk [files] ausführen .

Wenn Sie beispielsweise ein Skript namens hello.awk , das Folgendes enthält:

#!/usr/bin/awk -f BEGIN {print „Hallo“}

Sie können das Skript mit dem folgenden Befehl ausführen:

./hello.awk

Welche geben:

Guten Morgen

Wie übergebe ich Argumente an ein AWK-Skript?

dl.beatsnoop.com Daumen 1687289922

Um Argumente an ein AWK-Skript zu übergeben, können Sie zwei Methoden verwenden:

  • Die erste Methode besteht darin, die -v mit dem Variable=Wert . Wenn Sie beispielsweise zwei Argumente namens var1 und var2 an Ihr hello.awk- , können Sie den folgenden Befehl verwenden:
awk -v var1=hello -v var2=world -f hallo.awk 

Und in Ihrem hello.awk- $var1 und $var2 auf die Argumente zugreifen . Wenn Ihr Skript beispielsweise Folgendes enthält:

#!/usr/bin/awk -f BEGIN {print $var1 " " $var2}

Sie erhalten:

Bonjour Monde
  • Die zweite Methode besteht darin, das spezielle ARGV- , das die an das Skript übergebenen Argumente enthält. Wenn Sie beispielsweise zwei unbenannte Argumente an Ihr hello.awk , können Sie den folgenden Befehl verwenden:
awk -f hello.awk hallo Welt 

Und in Ihrem hello.awk- den Indizes ARGV[1] und ARGV[2] . Wenn Ihr Skript beispielsweise Folgendes enthält:

#!/usr/bin/awk -f BEGIN {print ARGV[1] " " ARGV[2]}

Sie erhalten:

Bonjour Monde

FAQs

Was ist der Unterschied zwischen AWK und GAWK?

GAWK ist eine GNU-Implementierung von AWK, die der Originalsprache zusätzliche Funktionen hinzufügt, wie etwa die Unterstützung erweiterter regulärer Ausdrücke, mehrdimensionaler Arrays oder vordefinierter Funktionen.

Wie debugge ich ein AWK-Skript?

-W Parameter lint verwenden , der Warnmeldungen zu möglichen Fehlern im Skript anzeigt. -W mit dem dump-variables verwenden , der die Variablenwerte am Ende der Skriptausführung anzeigt.

Wie verwende ich den AWK-Befehl zum Sortieren von Daten?

Um den AWK-Befehl zum Sortieren von Daten zu verwenden, können Sie den Sortierbefehl in Kombination mit AWK verwenden. Wenn Sie beispielsweise Benutzer in der /etc/passwd nach ihren UIDs sortieren möchten, können Sie den folgenden Befehl verwenden:

awk -F: '{print $1, $3}' /etc/passwd | sortieren -n -k2 

Durch die Kombination von AWK mit anderen Befehlen (hier sort ) können Sie bei der Anzeige und Organisation von Daten ganz einfach viel weiter gehen.

Wie drucke ich die Wortanzahl einer Datei mit dem AWK-Befehl aus?

Um die Anzahl der Wörter in einer Datei mit dem AWK-Befehl auszugeben, können Sie die spezielle Variable NF , die die Anzahl der Felder in der aktuellen Zeile enthält, und die spezielle Variable NR , die die Nummer der aktuellen Zeile enthält. Mit einer for-Schleife können Sie die Anzahl der Wörter in jeder Zeile zählen und sie zu einer Gesamtvariablen . Mit dem Sondermuster END können Sie das Endergebnis ausdrucken. Wenn Sie beispielsweise eine Datei namens test.txt , die Folgendes enthält:

Dies ist ein Test. AWK ist ein großartiges Tool. Linux ist das beste Betriebssystem

Sie können die Wortanzahl der Datei mit dem folgenden Befehl ausdrucken:

awk '{for (i=1; i<=NF; i++) total++} END {print total}' test.txt

Welche geben:

9

Wie verwende ich den AWK-Befehl, um Daten aus einer CSV-Datei zu extrahieren?

Um den AWK-Befehl zum Extrahieren von Daten aus einer CSV-Datei (Comma-Separated Values) zu verwenden, können Sie die -F , um das Feldtrennzeichen auf ein Komma festzulegen. Wenn Sie beispielsweise eine Datei mit dem Namen test.csv , die Folgendes enthält:

Name, Vorname, Alter Alice, Dupont, 25 Bob, Martin, 32 Charles, Durand, 28

Mit dem folgenden Befehl können Sie den Namen und das Alter von Personen extrahieren:

awk -F"," '{print $1 " " $3}' test.csv

Welche geben:

Name Alter Alice 25 Bob 32 Charles 28

Wie filtere ich Daten mit dem AWK-Befehl?

Mit dem AWK-Befehl können Sie Daten basierend auf Mustern filtern, bei denen es sich um reguläre Ausdrücke oder logische Bedingungen handelt. Muster werden vor Aktionen platziert, getrennt durch geschweifte Klammern. Wenn Sie beispielsweise Zeilen in der test.csv Alice enthalten , können Sie das folgende Muster verwenden:

awk -F"," '/Alice/ {print}' test.csv

Welche geben:

Alice,Dupont,25

test.csv- anzeigen möchten , die älter als 30 Jahre sind, können Sie das folgende Muster verwenden:

awk -F"," '$3 > 30 {print}' test.csv

Welche geben:

Bob,Martin,32

Sie können mehrere Muster mit den logischen Operatoren && (und), || (oder) und ! (NEIN). Wenn Sie beispielsweise Zeilen in der test.csv , deren Name mit C oder deren Alter weniger als 10 Jahre beträgt, können Sie das folgende Muster verwenden:

awk -F"," '($1 ~ /^C/) || ($3 < 10) {print}' test.csv 

Welche geben:

CAMILLE,M,7 CLARA,F,11 CLEMENT,M,7

Wie berechnet man Statistiken mit dem AWK-Befehl?

Mit dem AWK-Befehl können Sie Statistiken zu numerischen Daten in einer Datei berechnen, z. B. Summe, Durchschnitt, Minimum oder Maximum. Verwenden Sie dazu einfach Variablen, um Zwischenwerte zu speichern und diese in jeder Zeile zu aktualisieren. Mit dem speziellen END- können wir das Endergebnis anzeigen. Wenn Sie beispielsweise die Summe und den Durchschnitt der Altersangaben in der test.csv , können Sie das folgende Programm verwenden:

awk -F"," 'NR>1 {sum+=$3; count++} END {print "Summe: " sum; print 'Durchschnitt: 'Summe/Anzahl}' test.csv 

Welche geben:

Summe: 110 Durchschnitt: 18,3333

Erläuterungen:

  • Wir verwenden die -F“, um das Feldtrennzeichen als Komma zu definieren.
  • Wir verwenden die Bedingung NR>1 , um die erste Zeile der Datei zu ignorieren, die die Spaltennamen enthält.
  • Wir verwenden die sum und count, um die Summe und Anzahl der Altersgruppen zu akkumulieren. Operator += , um die Variablen mit dem Wert des dritten Felds ( $3 ) zu erhöhen.
  • Wir verwenden das END- , um das Endergebnis anzuzeigen. Wir verwenden den / , um den Durchschnitt zu berechnen, indem wir die Summe durch die Zahl dividieren.

Wenn Sie das Mindest- und Höchstalter der test.csv , können Sie ebenfalls das folgende Programm verwenden:

awk -F"," 'NR>1 {if (min=="") min=max=$3; wenn ($3 max) max=$3} END {print "Min: " min; print 'Max: 'max}' test.csv 

Welche geben:

Min: 6 Max: 32

Erläuterungen:

  • Wir verwenden die -F“, um das Feldtrennzeichen als Komma zu definieren.
  • Wir verwenden die Bedingung NR>1 , um die erste Zeile der Datei zu ignorieren, die die Spaltennamen enthält.
  • Wir verwenden die „min“ und „max“ , um das Mindest- und Höchstalter zu speichern. Wir initialisieren diese Variablen mit dem Wert des dritten Feldes ( $3 ), wenn sie leer sind ( "" ). Wir verwenden die < und > , um Werte zu vergleichen und Variablen bei Bedarf zu aktualisieren.
  • Wir verwenden das END- , um das Endergebnis anzuzeigen.

Abschluss

Der AWK-Befehl ist ein unverzichtbares Werkzeug zum Bearbeiten von Texten unter Linux. Damit können Sie komplexe Aufgaben in wenigen Codezeilen ausführen, z. B. das Extrahieren, Filtern, Ändern oder Berechnen von Daten. Dank seiner Muster, Aktionen, Funktionen und Variablen bietet es große Flexibilität. Es kann mit anderen Linux-Befehlen kombiniert werden, um seine Möglichkeiten zu erweitern. Sie können beispielsweise den Echo-Befehl unter Windows , um eine Nachricht oder Variable auf dem Bildschirm anzuzeigen. Wenn Sie mehr über den AWK-Befehl erfahren möchten, können Sie das Handbuch oder die zahlreichen Tutorials im Internet konsultieren.

Vorheriger Artikel Wie sichern Sie Ihre Dateiübertragungen mit FTPS auf Windows Server?
Nächster Artikel Wie bekomme ich kostenloses YouTube Premium?
Hallo, ich bin François :) In meiner Freizeit Redakteur, der es liebt, seine Leidenschaft zu teilen: TT High Tech! 😍 Egal ob Hardware, Software, Videospiele, Social Media und viele weitere Bereiche der Seite. Ich teile meine Analysen, meine Tests, Tutorials und meine Favoriten auf verschiedenen Medien mit Ihnen. Ich bin ein sachkundiger und anspruchsvoller Technikliebhaber, der nicht nur der Mode folgt, sondern Sie zu den besten Lösungen führen möchte. Also bleibt gespannt!