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

Erste Schritte mit awk, einem leistungsstarken Textparsing-Tool

Awk ist ein leistungsstarkes Textparsing-Tool für Unix und Unix-ähnliche Systeme, aber da es über programmierte Funktionen verfügt, mit denen Sie allgemeine Parsing-Aufgaben ausführen können, wird es auch als Programmiersprache betrachtet . Wahrscheinlich werden Sie Ihre nächste GUI-Anwendung nicht mit awk entwickeln, und es wird wahrscheinlich nicht den Platz Ihrer Standard-Skriptsprache einnehmen, aber es ist ein leistungsstarkes Dienstprogramm für bestimmte Aufgaben.

Was diese Aufgaben sein können, ist überraschend vielfältig. Der beste Weg herauszufinden, welches Ihrer Probleme am besten mit awk gelöst werden kann, ist awk zu lernen; Sie werden überrascht sein, wie awk Ihnen dabei helfen kann, mit viel weniger Aufwand mehr zu erledigen.

Die grundlegende Syntax von Awk lautet:

awk [options] 'pattern {action}' file 

Erstellen Sie zunächst diese Beispieldatei und speichern Sie sie als colours.txt

name       farbe  menge
apfel      rot    4
banane     gelb 6
erdbeerrot    3
traube      lila 10
apfel      grün  8
pflaume       lila 2
Kiwi      braun  4
Kartoffel     braun  9
Ananas  gelb 5

Diese Daten werden durch ein oder mehrere Leerzeichen in Spalten getrennt. Es ist üblich, dass Daten, die Sie analysieren, auf irgendeine Weise organisiert sind. Es müssen nicht immer Spalten sein, die durch Leerzeichen oder sogar ein Komma oder Semikolon getrennt sind, aber insbesondere in Protokolldateien oder Datendumps gibt es im Allgemeinen ein vorhersehbares Muster. Sie können Datenmuster verwenden, um awk dabei zu helfen, die Daten zu extrahieren und zu verarbeiten, auf die Sie sich konzentrieren möchten.

Drucken einer Spalte

In awk der Aufdruck Die Funktion zeigt an, was Sie angeben. Es gibt viele vordefinierte Variablen, die Sie verwenden können, aber einige der gebräuchlichsten sind ganze Zahlen, die Spalten in einer Textdatei bezeichnen. Probieren Sie es aus:

$ awk '{print $2;}' colors.txt
Farbe
rot
gelb
rot
lila
grün
lila
braun
braun
gelb

In diesem Fall zeigt awk die zweite Spalte an, gekennzeichnet durch $2 . Dies ist relativ intuitiv, sodass Sie wahrscheinlich erraten können, dass $1 gedruckt wird zeigt die erste Spalte an und gibt $3 aus zeigt die dritte an usw.

Um alle anzuzeigen Spalten, verwenden Sie $0 .

Die Zahl nach dem Dollarzeichen ($ ) ist ein Ausdruck , also $2 und $(1+1) dasselbe bedeuten.

Bedingtes Auswählen von Spalten

Die von Ihnen verwendete Beispieldatei ist sehr strukturiert. Es hat eine Zeile, die als Überschrift dient, und die Spalten beziehen sich direkt aufeinander. Durch die Definition von conditional Anforderungen können Sie qualifizieren, was awk zurückgeben soll, wenn Sie sich diese Daten ansehen. Um beispielsweise Elemente in Spalte 2 anzuzeigen, die mit "gelb" übereinstimmen, und den Inhalt von Spalte 1 auszugeben:

awk '$2=="yellow"{print $1}' colors.txt
Banane
Ananas

Reguläre Ausdrücke funktionieren auch. Diese Bedingung betrachtet $2 für ungefähre Übereinstimmungen mit dem Buchstaben p gefolgt von beliebig vielen (einem oder mehreren) Zeichen, denen wiederum der Buchstabe p folgt :

$ awk '$2 ~ /p.+p/ {print $0}' colors.txt
traube   lila  10
pflaume    lila  2

Zahlen werden von awk natürlich interpretiert. Zum Beispiel, um eine Zeile mit einer dritten Spalte zu drucken, die eine ganze Zahl größer als 5 enthält:

awk '$3>5 {print $1, $2}' colors.txt
Name    Farbe
Banane  Gelb
Traube   Lila
Apfel   Grün
Kartoffel  Braun

Feldtrenner

Standardmäßig verwendet awk Leerzeichen als Feldtrenner. Nicht alle Textdateien verwenden jedoch Leerzeichen, um Felder zu definieren. Erstellen Sie beispielsweise eine Datei mit dem Namen colours.csv mit diesem Inhalt:

Name,Farbe,Menge
Apfel,rot,4
Banane,gelb,6
Erdbeere,rot,3
Traube,lila,10
Apfel, Grün,8
Pflaume,Lila,2
Kiwi,Braun,4
Kartoffel,Braun,9
Ananas,Gelb,5

Awk kann die Daten genauso behandeln, solange Sie angeben, welches Zeichen es als Feldtrenner in Ihrem Befehl verwenden soll. Verwenden Sie den --field-separator (oder einfach -F kurz) Option zum Definieren des Trennzeichens:

$ awk -F"," '$2=="yellow" {print $1}' file1.csv
Banane
Ananas

Ausgabe speichern

Mithilfe der Ausgabeumleitung können Sie Ihre Ergebnisse in eine Datei schreiben. Zum Beispiel:

$ awk -F, '$3>5 {print $1, $2} colours.csv > output.txt 

Dadurch wird eine Datei mit dem Inhalt Ihrer awk-Abfrage erstellt.

Weitere Linux-Ressourcen

  • Spickzettel für Linux-Befehle
  • Spickzettel für fortgeschrittene Linux-Befehle
  • Kostenloser Online-Kurs:RHEL Technical Overview
  • Spickzettel für Linux-Netzwerke
  • SELinux-Spickzettel
  • Spickzettel für allgemeine Linux-Befehle
  • Was sind Linux-Container?
  • Unsere neuesten Linux-Artikel

Sie können eine Datei auch in mehrere Dateien aufteilen, die nach Spaltendaten gruppiert sind. Wenn Sie beispielsweise colors.txt in mehrere Dateien aufteilen möchten, je nachdem, welche Farbe in jeder Zeile erscheint, können Sie awk veranlassen, pro Abfrage umzuleiten indem Sie die Umleitung in Ihre awk-Anweisung aufnehmen:

$ awk '{print > $2".txt"}' colours.txt 

Dadurch werden Dateien mit dem Namen yellow.txt erstellt , red.txt , und so weiter.

Im nächsten Artikel erfahren Sie mehr über Felder, Datensätze und einige mächtige awk-Variablen.


Dieser Artikel ist eine Adaption einer Folge von Hacker Public Radio, einem Community-Technologie-Podcast.


Linux
  1. Erste Schritte mit Zsh

  2. Erste Schritte mit ls

  3. Erste Schritte mit socat, einem Mehrzweck-Relay-Tool für Linux

  4. Erste Schritte mit PostgreSQL unter Linux

  5. Erste Schritte mit SSH unter Linux

Erste Schritte mit dem Linux-Betriebssystem

Erste Schritte mit GitHub

Erste Schritte mit Nix Package Manager

Erste Schritte mit systemctl

Erste Schritte mit AWK Command [Leitfaden für Anfänger]

Erste Schritte mit dem Tar-Befehl