In dieser anfängerfreundlichen Anleitung lernen Sie die Grundlagen des awk
kennen Befehl. Sie werden auch einige Möglichkeiten sehen, wie Sie es beim Umgang mit Text verwenden können.
Fangen wir an!
Was ist das awk
Befehl?
awk
ist eine Skriptsprache und ist hilfreich, wenn Sie in der Befehlszeile arbeiten. Es ist auch ein weit verbreiteter Befehl zur Textverarbeitung.
Bei Verwendung von awk
, können Sie Daten – einen oder mehrere individuelle Texte – basierend auf einem von Ihnen bereitgestellten Muster auswählen.
Zum Beispiel einige der Operationen, die Sie mit awk
ausführen können nach einem bestimmten Wort oder Muster in einem gegebenen Textstück suchen oder sogar eine bestimmte Zeile oder eine bestimmte Spalte in einer von Ihnen bereitgestellten Datei auswählen.
Die grundlegende Syntax von awk
Befehl
In seiner einfachsten Form ist das awk
Auf den Befehl folgt eine Reihe einfacher Anführungszeichen und eine Reihe geschweifter Klammern, wobei der Name der Datei, die Sie durchsuchen möchten, zuletzt erwähnt wird.
Es sieht in etwa so aus:
awk '{action}' your_file_name.txt
Wenn Sie nach Text suchen möchten, der ein bestimmtes Muster hat, oder Sie nach einem bestimmten Wort im Text suchen, sieht der Befehl etwa so aus:
awk '/regex pattern/{action}' your_file_name.txt
So erstellen Sie eine Beispieldatei
Um eine Datei in der Kommandozeile zu erstellen, verwenden Sie den touch
Befehl.
Zum Beispiel:touch filename.txt
wobei filename
, ist der Name Ihrer Datei.
Sie können dann den open
verwenden Befehl (open filename.txt
), und ein Textverarbeitungsprogramm wie TextEdit wird geöffnet, in dem Sie den Inhalt der Datei hinzufügen können.
Angenommen, Sie haben eine Textdatei, information.txt
, das Daten enthält, die in verschiedene Spalten unterteilt sind.
Der Dateiinhalt könnte etwa so aussehen:
fristName lastName age city ID
Thomas Shelby 30 Rio 400
Omega Night 45 Ontario 600
Wood Tinker 54 Lisbon N/A
Giorgos Georgiou 35 London 300
Timmy Turner 32 Berlin N/A
In meinem Beispiel gibt es eine Spalte für firstName
, lastName
, age
, city
, und ID
.
Sie können sich jederzeit die Ausgabe des Inhalts Ihrer Datei ansehen, indem Sie cat text_file
eingeben , wobei text_file
ist der Name Ihrer Datei.
So drucken Sie den gesamten Inhalt der Datei mit awk
Um alle zu drucken den Inhalt einer Datei, die Aktion, die Sie innerhalb der geschweiften Klammern angeben, ist print $0
.
Dies funktioniert genauso wie cat
zuvor erwähnten Befehl.
awk '{print $0}' information.txt
Ausgabe:
fristName lastName age city ID
Thomas Shelby 30 Rio 400
Omega Night 45 Ontario 600
Wood Tinker 54 Lisbon N/A
Giorgos Georgiou 35 London 300
Timmy Turner 32 Berlin N/A
Wenn Sie möchten, dass jede Zeile eine Zeilennummer hat, würden Sie den NR
verwenden eingebaute Variable:
awk '{print NR,$0}' information.txt
1 fristName lastName age city ID
2
3 Thomas Shelby 30 Rio 400
4 Omega Night 45 Ontario 600
5 Wood Tinker 54 Lisbon N/A
6 Giorgos Georgiou 35 London 300
7 Timmy Turner 32 Berlin N/A
So drucken Sie bestimmte Spalten mit awk
Bei Verwendung von awk
, können Sie bestimmte Spalten angeben, die gedruckt werden sollen.
Um die erste Spalte drucken zu lassen, verwenden Sie den Befehl:
awk '{print $1}' information.txt
Ausgabe:
Thomas
Omega
Wood
Giorgos
Timmy
Der $1
steht für das erste Feld, in diesem Fall die erste Spalte.
Um die zweite Spalte zu drucken, würden Sie $2
verwenden :
awk '{print $2}' information.txt
Ausgabe:
lastName
Shelby
Night
Tinker
Georgiou
Turner
Der Weg awk
legt fest, wo jede Spalte beginnt und endet, ist standardmäßig ein Leerzeichen.
Um mehr als eine Spalte zu drucken, zum Beispiel die erste und vierte Spalte, würden Sie Folgendes tun:
awk '{print $1, $4}' information.txt
Ausgabe:
fristName city
Thomas Rio
Omega Ontario
Wood Lisbon
Giorgos London
Timmy Berlin
Der $1
steht für das erste Eingabefeld (erste Spalte) und den $4
stellt das vierte dar. Sie trennen sie mit einem Komma, $1,$4
, sodass die Ausgabe ein Leerzeichen hat und besser lesbar ist.
Um das letzte Feld (die letzte Spalte) zu drucken, können Sie auch $NF
verwenden was das letzte darstellt Feld in einem Datensatz:
awk '{print $NF}' information.txt
Ausgabe:
ID
400
600
N/A
300
N/A
So drucken Sie bestimmte Zeilen einer Spalte
Sie können auch die Zeile angeben, die Sie aus Ihrer gewählten Spalte drucken möchten:
awk '{print $1}' information.txt | head -1
Ausgabe:
FirstName
Lassen Sie uns diesen Befehl aufschlüsseln. awk '{print $1}' information.txt
druckt die erste Spalte. Dann wird die Ausgabe dieses Befehls (die Sie zuvor gesehen haben) piped , indem Sie das Pipe-Symbol |
verwenden , zum Head-Befehl, wo sein -1
Argument wählt die erste Zeile der Spalte aus.
Wenn Sie möchten, dass zwei Zeilen gedruckt werden, würden Sie Folgendes tun:
awk '{print $1}' information.txt | head -2
Ausgabe:
FirstName
Dionysia
Wie man Linien mit einem bestimmten Muster in awk
ausdruckt
Sie können eine Zeile drucken, die beginnt mit einem bestimmten Buchstaben.
Zum Beispiel:
awk '/^O/' information.txt
Ausgabe:
Omega Night 45 Ontario 600
Dieser Befehl wählt jede Zeile mit Text aus, die beginnt mit einem O
.
Sie verwenden das Aufwärtspfeilsymbol (^
) zuerst, was den Beginn einer Zeile angibt, und dann den Buchstaben, mit dem eine Zeile beginnen soll.
Sie können auch eine Zeile drucken, die endet in einem bestimmten Muster:
awk '/0$/' information.txt
Ausgabe:
Thomas Shelby 30 Rio 400
Omega Night 45 Ontario 600
Giorgos Georgiou 35 London 300
Dies gibt die Zeilen aus, die auf 0
enden – das $
Symbol wird nach einem Zeichen verwendet, um anzugeben, wie eine Zeile endet.
Dieser Befehl könnte auch geändert werden in:
awk '! /0$/' information.txt
Der !
wird als NOT
verwendet , also werden in diesem Fall die Zeilen ausgewählt, die NICHT mit 0
enden .
fristName lastName age city ID
Wood Tinker 54 Lisbon N/A
Timmy Turner 32 Berlin N/A
Wie man reguläre Ausdrücke in awk
verwendet
Um Wörter auszugeben, die bestimmte Buchstaben enthalten, und Wörter auszudrucken, die einem von Ihnen festgelegten Muster entsprechen, verwenden Sie wieder die Schrägstriche //
, zuvor gezeigt.
Wenn Sie nach Wörtern suchen möchten, die on
enthalten , würden Sie Folgendes tun:
awk ' /io/{print $0}' information.txt
Ausgabe:
Thomas Shelby 30 Rio 400
Omega Night 45 Ontario 600
Giorgos Georgiou 35 London 300
Dies stimmt mit allen Einträgen überein, die io
enthalten .
Angenommen, Sie hätten eine zusätzliche Spalte – eine department
Spalte:
fristName lastName age city ID department
Thomas Shelby 30 Rio 400 IT
Omega Night 45 Ontario 600 Design
Wood Tinker 54 Lisbon N/A IT
Giorgos Georgiou 35 London 300 Data
Timmy Turner 32 Berlin N/A Engineering
Um alle Informationen von Personen zu finden, die in der IT
arbeiten , müssten Sie die Zeichenfolge, nach der Sie suchen, zwischen den Schrägstrichen angeben, //
:
awk '/IT/' information.txt
Ausgabe:
Thomas Shelby 30 Rio 400 IT
Wood Tinker 54 Lisbon N/A IT
Was wäre, wenn Sie nur die Vor- und Nachnamen der Personen sehen möchten, die in der IT
arbeiten? ?
Sie können die Spalte wie folgt angeben:
awk '/IT/{print $1, $2}' information.txt
Ausgabe:
Thomas Shelby
Wood Tinker
Dadurch werden nur die erste und zweite Spalte angezeigt, in denen IT
angezeigt, anstatt alle Felder anzuzeigen.
Bei der Suche nach Wörtern mit einem bestimmten Muster kann es vorkommen, dass Sie ein Escape-Zeichen wie dieses verwenden müssen:
awk '/N\/A$/' information.txt
Ausgabe:
Wood Tinker 54 Lisbon N/A
Timmy Turner 32 Berlin N/A
Ich wollte Zeilen finden, die mit dem Muster N/A
enden .
Also, bei der Suche zwischen den ' // '
wie bisher gezeigt, musste ich ein Escape-Zeichen verwenden (\
) zwischen N/A
, sonst hätte ich einen Fehler bekommen.
Verwendung von Vergleichsoperatoren in awk
Wenn Sie beispielsweise alle Informationen von Mitarbeitern finden möchten, die jünger als 40
waren , würden Sie den <
verwenden Vergleichsoperator wie folgt:
awk '$3 < 40 { print $0 }' information.txt
Ausgabe:
Thomas Shelby 30 Rio 400
Giorgos Georgiou 35 London 300
Timmy Turner 32 Berlin N/A
Die Ausgabe zeigt nur die Informationen von Personen unter 40.
Schlussfolgerung
Und da haben Sie es! Sie kennen jetzt die absoluten Grundlagen, um mit awk
zu arbeiten und Textdaten manipulieren.
Um mehr über Linux zu erfahren, bietet freeCodeCamp eine große Auswahl an Lernmaterialien.
Hier sind ein paar davon für den Anfang:
- Linux-Grundlagen – Praktischer Workshop
- Linux für ethische Hacker (Kali-Linux-Tutorial)
- Das Linux-Befehlshandbuch
Danke fürs Lesen und viel Spaß beim Lernen 😊