Awk

So verwenden Sie AWK unter Linux

So verwenden Sie AWK unter Linux

Die Linux-Dienstprogramme folgen oft der UNIX-Designphilosophie philosophy. Jedes Tool sollte klein sein, Klartext für I/O verwenden und modular arbeiten. Dank des Erbes verfügen wir mit Hilfe von Tools wie sed und awk über einige der besten Textverarbeitungsfunktionen.

Unter Linux ist das awk-Tool auf allen Linux-Distributionen vorinstalliert. AWK selbst ist eine Programmiersprache. Das AWK-Tool ist nur ein Interpreter der AWK-Programmiersprache. In diesem Handbuch erfahren Sie, wie Sie AWK unter Linux verwenden.

AWK-Nutzung

Das AWK-Tool ist am nützlichsten, wenn Texte in einem vorhersehbaren Format organisiert sind. Es ist ziemlich gut darin, Tabellendaten zu analysieren und zu manipulieren. Es arbeitet zeilenweise mit der gesamten Textdatei.

Das Standardverhalten von awk ist die Verwendung von Leerzeichen (Leerzeichen, Tabulatoren usw.).) zum Trennen von Feldern. Glücklicherweise folgen viele der Konfigurationsdateien unter Linux diesem Muster.

Grundsyntax

So sieht die Befehlsstruktur von awk aus.

$ awk '// ; ; '

Die Teile des Befehls sind ziemlich selbsterklärend. Awk kann ohne den Such- oder Aktionsteil arbeiten. Wenn nichts angegeben ist, ist die Standardaktion für das Spiel nur das Drucken. Grundsätzlich druckt awk alle Übereinstimmungen, die in der Datei gefunden wurden.

Wenn kein Suchmuster angegeben ist, führt awk die angegebenen Aktionen in jeder einzelnen Zeile der Datei aus.

Wenn beide Teile angegeben sind, verwendet awk das Muster, um zu bestimmen, ob die aktuelle Zeile es widerspiegelt. Bei Übereinstimmung führt awk die angegebene Aktion aus.

Beachten Sie, dass awk auch mit umgeleiteten Texten arbeiten kann. Dies kann erreicht werden, indem der Inhalt des Befehls an awk weitergeleitet wird, um darauf zu reagieren. Erfahren Sie mehr über den Linux-Pipe-Befehl.

Zu Demozwecken hier eine Beispieltextdatei. Es enthält 10 Zeilen, 2 Wörter pro Zeile.

$ Katzenprobe.TXT

Regulären Ausdruck

Eine der wichtigsten Funktionen, die awk zu einem leistungsstarken Tool machen, ist die Unterstützung von regulären Ausdrücken (kurz: Regex). Ein regulärer Ausdruck ist eine Zeichenfolge, die ein bestimmtes Zeichenmuster darstellt.

Hier ist eine Liste mit einigen der gängigsten Syntaxen für reguläre Ausdrücke regular. Diese Regex-Syntaxen sind nicht nur awk. Dies sind fast universelle Regex-Syntaxen, daher wird es auch bei anderen Apps/Programmierungen hilfreich sein, die reguläre Ausdrücke beinhalten.

  • Grundzeichen: Alle alphanumerischen Zeichen unterstreichen (_) usw.
    • Zeichensatz: Zur Vereinfachung gibt es in der Regex Zeichengruppen. Zum Beispiel Großbuchstaben (A-Z), Kleinbuchstaben (a-z) und numerische Ziffern (0-9).
  • Metazeichen: Dies sind Zeichen, die verschiedene Möglichkeiten zur Erweiterung der gewöhnlichen Zeichen erklären.
    • Zeitraum (.): Jede Zeichenübereinstimmung in der Position ist gültig (außer einem Zeilenumbruch).
    • Stern (*): Null oder mehr Existenzen des unmittelbar vorangehenden Zeichens sind gültig.
    • Klammer ([]): Die Übereinstimmung ist gültig, wenn an der Position eines der Zeichen aus der Klammer übereinstimmt. Es kann mit Zeichensätzen kombiniert werden.
    • Caret (^): Das Spiel muss am Anfang der Reihe sein.
    • Dollar ($): Das Spiel muss am Ende der Reihe sein.
    • Backslash (\): Wenn ein Metazeichen im wörtlichen Sinne verwendet werden muss.

Drucken des Textes

Um den gesamten Inhalt einer Textdatei zu drucken, verwenden Sie den Druckbefehl. Beim Suchmuster ist kein Muster definiert. Also, awk druckt alle Zeilen.

$ awk 'print'-Beispiel.TXT

Hier ist „print“ ein AWK-Befehl, der den Inhalt der Eingabe druckt.

String-Suche

AWK kann eine einfache Textsuche für den angegebenen Text durchführen. Im Schnittmuster-Bereich muss es der zu findende Text sein.

Im folgenden Befehl sucht awk nach dem Text „quick“ in allen Zeilen des Dateibeispiels.TXT.

$ awk '/quick/'-Beispiel.TXT

Lassen Sie uns nun einige reguläre Ausdrücke verwenden, um die Suche weiter zu verfeinern. Der folgende Befehl druckt alle Zeilen, die am Anfang „braun“ haben.

$ awk '/^brown/' Beispiel.TXT

Wie wäre es, etwas am Ende einer Zeile zu finden?? Der folgende Befehl druckt alle Zeilen, die am Ende „quick“ haben.

$ awk '/quick$/' Beispiel.TXT

Wildcard-Muster

Das nächste Beispiel zeigt die Verwendung des Caret-Zeichens (.). Hier können zwei beliebige Zeichen vor dem Zeichen „e“ stehen.

$ awk '/… e/' Beispiel.TXT

Wildcard-Muster (mit Sternchen)

Was ist, wenn am Standort eine beliebige Anzahl von Zeichen vorhanden sein kann?? Um ein beliebiges Zeichen an der Position zu finden, verwenden Sie das Sternchen (*). Hier stimmt AWK mit allen Zeilen überein, die eine beliebige Anzahl von Zeichen nach „dem“ haben.

$ awk '/the*/' Beispiel.TXT

Klammerausdruck

Das folgende Beispiel zeigt, wie der Klammerausdruck verwendet wird. Der Klammerausdruck sagt, dass die Übereinstimmung an der Position gültig ist, wenn sie mit dem Satz von Zeichen übereinstimmt, die von den Klammern eingeschlossen sind. Der folgende Befehl entspricht beispielsweise „The“ und „Tee“ als gültige Übereinstimmungen.

$ awk '/T[he]e/' Beispiel.TXT

Es gibt einige vordefinierte Zeichensätze im regulären Ausdruck. Zum Beispiel wird die Menge aller Großbuchstaben als "A-Z" bezeichnet. Im folgenden Befehl findet awk alle Wörter, die einen Großbuchstaben enthalten.

$ awk '/[A-Z]/' Beispiel.TXT

Sehen Sie sich die folgende Verwendung von Zeichensätzen mit Klammerausdruck an.

  • [0-9]: Zeigt eine einzelne Ziffer an
  • [a-z]: Gibt einen einzelnen Kleinbuchstaben an
  • [A-Z]: Zeigt einen einzelnen Großbuchstaben an
  • [a-zA-z]: Zeigt einen einzelnen Buchstaben an
  • [a-zA-z 0-9]: Zeigt ein einzelnes Zeichen oder eine Ziffer an.

Awk vordefinierte Variablen

AWK wird mit einer Reihe vordefinierter und automatischer Variablen geliefert. Diese Variablen können das Schreiben von Programmen und Skripten mit AWK erleichtern.

Hier sind einige der häufigsten AWK-Variablen, denen Sie begegnen werden.

  • DATEINAME: Der Dateiname der aktuellen Eingabedatei.
  • RS: Der Datensatztrenner. Aufgrund der Natur von AWK verarbeitet es Daten satzweise. Hier gibt diese Variable das Trennzeichen an, das zum Aufteilen des Datenstroms in Datensätze verwendet wird. Standardmäßig ist dieser Wert das Newline-Zeichen.
  • NR: Die aktuelle Eingabedatensatznummer. Wenn der RS-Wert auf Standard gesetzt ist, zeigt dieser Wert die aktuelle Eingangszeilennummer an.
  • FS/OFS: Das/die als Feldtrennzeichen verwendete(n) Zeichen. Nach dem Lesen teilt AWK einen Datensatz in verschiedene Felder auf. Das Trennzeichen wird durch den Wert von FS . definiert. Beim Drucken fügt AWK alle Felder wieder zusammen. Derzeit verwendet AWK jedoch das OFS-Trennzeichen anstelle des FS-Trennzeichens. Im Allgemeinen sind sowohl FS als auch OFS gleich, aber nicht zwingend erforderlich.
  • NF: Die Anzahl der Felder im aktuellen Datensatz. Wenn der Standardwert „Whitespace“ verwendet wird, entspricht er der Anzahl der Wörter im aktuellen Datensatz.
  • ORS: Das Datensatztrennzeichen für die Ausgabedaten. Der Standardwert ist das Newline-Zeichen.

Lassen Sie uns sie in Aktion überprüfen. Der folgende Befehl verwendet die NR-Variable, um Zeile 2 bis Zeile 4 aus Beispiel zu drucken.TXT. AWK unterstützt auch logische Operatoren wie logisches und (&&).

$ awk 'NR > 1 && NR < 5' sample.txt

Um einer AWK-Variablen einen bestimmten Wert zuzuweisen, verwenden Sie die folgende Struktur.

$ awk '// ; ; ' =,

Um beispielsweise alle Leerzeilen aus der Eingabedatei zu entfernen, ändern Sie den Wert von RS auf im Grunde nichts. Es ist ein Trick, der eine obskure POSIX-Regel verwendet. Es gibt an, dass, wenn der Wert von RS eine leere Zeichenfolge ist, die Datensätze durch eine Sequenz getrennt werden, die aus einem Zeilenumbruch mit einer oder mehreren Leerzeilen besteht. In POSIX ist eine leere Zeile ohne Inhalt komplett leer. Wenn die Zeile jedoch Leerzeichen enthält, wird sie nicht als „leer“ betrachtet.

$ awk 'print' RS=" Beispiel.TXT

Zusätzliche Ressourcen

AWK ist ein leistungsstarkes Tool mit vielen Funktionen. Obwohl dieser Leitfaden viele davon behandelt, sind es immer noch die Grundlagen. Um AWK zu meistern, braucht es mehr als nur das. Diese Anleitung sollte eine nette Einführung in das Tool sein.

Wenn Sie das Tool wirklich beherrschen möchten, sollten Sie sich hier einige zusätzliche Ressourcen ansehen.

  • Leerzeichen kürzen
  • Eine bedingte Anweisung verwenden
  • Drucken Sie eine Reihe von Spalten
  • Regex mit AWK
  • 20 AWK-Beispiele

Das Internet ist ein ziemlich guter Ort, um etwas zu lernen. Es gibt viele tolle Tutorials zu AWK-Grundlagen für sehr fortgeschrittene Benutzer.

Letzter Gedanke

Hoffentlich hat dieser Leitfaden zu einem guten Verständnis der AWK-Grundlagen beigetragen. Es kann zwar eine Weile dauern, aber das Beherrschen von AWK ist in Bezug auf die Kraft, die es verleiht, äußerst lohnend.

Viel Spaß beim Rechnen!

Beste Spielkonsolen-Emulatoren für Linux
Dieser Artikel listet beliebte Spielekonsolen-Emulationssoftware auf, die für Linux verfügbar ist. Emulation ist eine Softwarekompatibilitätsschicht, ...
Beste Linux-Distributionen für Gaming im Jahr 2021
Das Linux-Betriebssystem hat sich weit von seinem ursprünglichen, einfachen, serverbasierten Aussehen entfernt. Dieses Betriebssystem hat sich in den ...
So erfassen und streamen Sie Ihre Gaming-Sitzung unter Linux
In der Vergangenheit galt das Spielen von Spielen nur als Hobby, aber mit der Zeit verzeichnete die Spieleindustrie ein enormes Wachstum in Bezug auf ...