So verwenden Sie awk unter Linux

So verwenden Sie awk unter Linux

Die Utilities Linux bieten häufig der Unix -Designphilosophie des Designs an. Jedes Werkzeug sollte klein sein, einen einfachen Text für E/A verwenden und modular arbeiten. Dank des Erbes haben wir mit Hilfe von Werkzeugen wie SED einige der besten Funktionen der Textverarbeitung mit Hilfe von Werkzeugen wie SED und AWK.

In Linux wird das awk-Tool auf allen Linux-Distributionen vorinstalliert. Awk selbst ist eine Programmiersprache. Das AWK -Tool ist nur ein Interpret der AWK -Programmiersprache. In diesem Handbuch finden Sie in der Verwendung von AWK unter Linux.

Awk Nutzung

Das awk -Tool ist am nützlichsten, wenn Texte in einem vorhersehbaren Format organisiert sind. Es ist ziemlich gut darin, tabellarische Daten zu analysieren und zu manipulieren. Es arbeitet in der gesamten Textdatei line-by-line-Basis in der gesamten Textdatei.

Das Standardverhalten von awk besteht darin, Weißespaces (Räume, Registerkarten usw. zu verwenden.) zum Trennen von Feldern. Zum Glück folgen viele der Konfigurationsdateien unter Linux diesem Muster.

Grundlegende Syntax

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, wird die Standardaktion im Spiel nur gedruckt. Grundsätzlich druckt awk alle in der Datei gefundenen Übereinstimmungen.

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 festzustellen, ob die aktuelle Linie es widerspiegelt. Wenn abgestimmt, führt awk die angegebene Aktion aus.

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

Für Demo -Zwecke finden Sie hier eine Beispieltextdatei. Es enthält 10 Zeilen, 2 Wörter pro Zeile.

$ CAT -Probe.txt

Regulären Ausdruck

Eines der Schlüsselmerkmale, die AWK zu einem leistungsstarken Tool machen, ist die Unterstützung des regulären Ausdrucks (kurz). Ein regulärer Ausdruck ist eine Zeichenfolge, die ein bestimmtes Zeichenmuster darstellt.

Hier ist eine Liste der häufigsten regulären Ausdrucksyntaxen. Diese Regex -Syntaxe sind nicht nur für awk nur einzigartig. Dies sind fast universelle Regex -Syntaxen, daher hilft das Mastering auch in anderen Apps/Programmierungen, die regelmäßig Ausdruck beinhalten.

  • Grundfiguren: Alle alphanumerischen Zeichen unterstrichen (_) usw.
    • Zeichensatz: Um die Sache zu erleichtern, gibt es Charaktergruppen in der Regex. Zum Beispiel Großbuchstaben (A-Z), Kleinbuchstaben (A-Z) und numerische Ziffern (0-9).
  • Metabarakter: Dies sind Charaktere, die verschiedene Möglichkeiten erklären, die gewöhnlichen Zeichen zu erweitern.
    • Zeitraum (.): Jedes Zeichen Match in der Position ist gültig (außer einer neuen Linie).
    • Sternchen (*): Null oder mehr existenzen des unmittelbaren Charakters, der es vorgeht, ist gültig.
    • Klammer ([]): Das Match ist gültig, wenn an der Position eines der Zeichen aus der Klammer übereinstimmt. Es kann mit Zeichensätzen kombiniert werden.
    • Pflege (^): Das Match muss am Anfang der Linie sein.
    • Dollar ($): Das Match muss am Ende der Linie sein.
    • Backslash (\): Wenn ein Meta-Charakter im wörtlichen Sinne verwendet werden muss.

Drucken des Textes

Um den gesamten Inhalt einer Textdatei zu drucken, verwenden Sie den Befehl drucken. Im Fall des Suchmusters wird kein Muster definiert. Also druckt awk alle Zeilen aus.

$ awk 'print' Beispiel.txt

Hier ist „Print“ ein awk -Befehl, der den Inhalt der Eingabe druckt.

String -Suche

Awk kann eine grundlegende Textsuche im angegebenen Text ausführen. Im Musterabschnitt muss es der Text sein, der zu finden ist.

Im folgenden Befehl sucht AWK in allen Zeilen der Dateibeispiel nach dem Text „schnell“ nach dem Text.txt.

$ awk '/Quick/' Beispiel.txt

Lassen Sie uns nun einige regelmäßige Ausdrücke verwenden, um die Suche weiter zu optimieren. Der folgende Befehl druckt alle Zeilen, die zu Beginn „braun“ haben.

$ awk '/^braun/' Beispiel.txt

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

$ awk '/Quick $/' Beispiel.txt

Wildkartenmuster

Das nächste Beispiel wird die Verwendung der Pflege vorstellen (.). Hier kann es zwei Zeichen vor dem Charakter „E“ geben.

$ awk '/… e/' Beispiel.txt

Wildkartenmuster (mit Sternchen)

Was ist, wenn es eine beliebige Anzahl von Zeichen am Ort geben kann? Verwenden Sie das Sternchen (*), um einen möglichen Charakter an der Position zu entsprechen, um den Sternchen zu verwenden (*). Hier passt Awk mit allen Zeilen überein, die nach „dem“ eine beliebige Anzahl von Zeichen haben.

$ awk '/das*/' Beispiel.txt

Ausdruck von Klammer

Das folgende Beispiel zeigt, wie Sie den Ausdruck der Halterung verwenden können. Der Ausdruck der Klammer zeigt, dass das Match am Ort gültig ist, wenn es dem von den Klammern eingeschlossenen Zeichen entspricht. Zum Beispiel stimmt der folgende Befehl mit den gültigen Übereinstimmungen mit „The“ und „Tee“ überein.

$ awk '/t [er] e/' Beispiel.txt

Es gibt einige vordefinierte Zeichensätze im regulären Ausdruck. Beispielsweise wird der Satz aller Großbuchstaben als "A-Z" bezeichnet. Im folgenden Befehl stimmt AWK mit allen Wörtern überein, die einen Großbuchstaben enthalten.

$ awk '/[a-z]/' Beispiel.txt

Schauen Sie sich die folgende Verwendung von Charakter -Sets mit Klassenausdruck an.

  • [0-9]: Zeigt eine einzelne Ziffer an
  • [A-Z]: Zeigt 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 Schreibprogramme und Skripte mit awk erleichtern.

Hier sind einige der häufigsten AWK -Variablen, auf die Sie stoßen werden.

  • DATEINAMEN: Der Dateiname der aktuellen Eingabedatei.
  • Rs: Der Rekordtrennzeichen. Aufgrund der Natur von awk verarbeitet es Daten auf einmal einen Datensatz. Hier gibt diese Variable den Trennzeichen an, mit dem der Datenstrom in Datensätze aufgeteilt wurde. Standardmäßig ist dieser Wert der neue Charakter.
  • Nr: Die aktuelle Eingangs Datensatznummer. Wenn der RS ​​-Wert auf Standard festgelegt ist, gibt dieser Wert die aktuelle Eingangsleitungsnummer an.
  • Fs/ofs: Die als Feldabscheider verwendeten Zeichen (en). Nach dem Lesen spaltet AWK einen Datensatz in verschiedene Felder auf. Der Trennzeichen wird durch den Wert von fs definiert. Beim Drucken tritt Awk über alle Felder zurück. Zu diesem Zeitpunkt verwendet AWK jedoch den OFS -Separator anstelle des FS -Separators. Im Allgemeinen sind sowohl FS als auch of OF gleich, aber nicht obligatorisch, um so zu sein.
  • Nf: Die Anzahl der Felder im aktuellen Datensatz. Wenn der Standardwert "Whitespace" verwendet wird, stimmt er mit der Anzahl der Wörter im aktuellen Datensatz überein.
  • Ors: Das Datensatzabscheider für die Ausgabedaten. Der Standardwert ist der neue Zeichen des neuen Line.

Lassen Sie uns sie in Aktion überprüfen. Der folgende Befehl verwendet die NR.txt. Awk unterstützt auch logische Operatoren wie logisch und (&&).

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

Verwenden Sie die folgende Struktur, um einer awk -Variablen einen bestimmten Wert zuzuweisen.

$ awk '// ; ; ' =,

Ändern Sie beispielsweise alle leeren Zeilen aus der Eingabedatei, um den Wert von RS auf im Grunde genommen nichts zu ändern. 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 sind, die aus einer neuen Zeile mit einer oder mehreren leeren Zeilen besteht. In POSIX ist eine leere Linie ohne Inhalt völlig leer. Wenn die Linie jedoch Whitespaces enthält, gilt sie nicht als „leer“.

$ awk 'print' rs = "Beispiel.txt

Zusätzliche Ressourcen

Awk ist ein leistungsstarkes Werkzeug mit Tonnen von Funktionen. Während dieser Leitfaden viele von ihnen abdeckt, sind es immer noch nur die Grundlagen. Mastering Awk wird mehr als nur das dauern. Dieser Leitfaden sollte eine schöne Einführung in das Werkzeug sein.

Wenn Sie das Tool wirklich beherrschen möchten, finden Sie hier einige zusätzliche Ressourcen, die Sie auschecken sollten.

  • Whitespace trimmen
  • Verwenden einer bedingten Anweisung
  • Drucken Sie eine Reihe von Spalten aus
  • Regex mit awk
  • 20 awk Beispiele

Das Internet ist ein guter Ort, um etwas zu lernen. Es gibt viele großartige Tutorials zu den Grundlagen für awk.

Letzter Gedanke

Hoffentlich hat dieser Leitfaden dazu beigetragen, die AWK -Grundlagen gut zu verstehen. Während es eine Weile dauern kann, ist das Mastering awk in Bezug auf die Kraft, die es schenkt, äußerst lohnend.

Happy Computing!