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 😊