So teilen Sie eine Datei mit Strings mit awk auf

So teilen Sie eine Datei mit Strings mit awk auf
Der Befehl Linux awk (abkürzte aus den Namen der Entwickler; AHO, Weinberger und Kernighan) ist eine großartige Möglichkeit, eine Stringsdatei zu verarbeiten und zu analysieren. Damit die Dateien informativer sind, müssen sie in Form von Zeilen und Spalten organisiert werden. Anschließend können Sie awk für diese Dateien verwenden, um:
  • Scannen Sie die Dateien, Zeile für Zeile.
  • Teilen Sie jede Zeile in Felder/Spalten auf.
  • Geben Sie Muster an und vergleichen Sie die Zeilen der Datei mit diesen Mustern
  • Führen Sie verschiedene Aktionen in den Zeilen aus, die einem bestimmten Muster entsprechen

In diesem Artikel erläutern wir die grundlegende Verwendung des awk. Wir haben die Beispiele aus diesem Artikel zu einem Debian 10 Buster -System durchgeführt, können jedoch leicht auf den meisten Linux -Distributionen repliziert werden.

Die Beispieldatei, die wir verwenden werden

Die Beispieldatei mit Zeichenfolgen, die wir verwenden werden, um die Verwendung des awk -Befehls zu demonstrieren, lautet wie folgt:

Dies ist, was jede Spalte der Beispieldatei angibt:

  • Die erste Spalte enthält den Namen von Mitarbeitern/Lehrern in einer Schule
  • Die zweite Spalte enthält das Thema, das der Mitarbeiter lehrt
  • Die dritte Spalte gibt an, ob der Mitarbeiter Professor oder Assistenzprofessor ist
  • Die vierte Spalte enthält die Bezahlung des Mitarbeiter

Beispiel 1: Verwenden Sie awk, um alle Zeilen einer Datei zu drucken

Das Drucken jeder Zeile einer bestimmten Datei ist das Standardverhalten des awk -Befehls. In der folgenden Syntax des awk -Befehls geben wir kein Muster an, das awk drucken soll. Daher soll der Befehl die Aktion „Drucken“ auf alle Zeilen der Datei anwenden.

Syntax:

$ awk 'print' Dateiname.txt

Beispiel:

In diesem Beispiel sage ich den Befehl awk, den Inhalt meiner Beispieldatei für Zeile für Zeile zu drucken.

$ awk 'print' sample_file.txt

Beispiel 2: Verwenden Sie awk, um nur die Zeilen zu drucken, die einem bestimmten Muster übereinstimmen

Mit awk können Sie ein Muster angeben, und der Befehl druckt nur die Zeilen, die mit diesem Muster übereinstimmen.

Syntax:

$ awk '/ muster_to_be_matched/ print' Dateiname.txt

Beispiel:

Wenn ich aus der Beispieldatei nur die Zeilen (n) drucken möchte, die die Variable 'B' enthalten, kann ich den folgenden Befehl verwenden:

$ awk '/ b/ print' sample_file.txt

Um das Beispiel sinnvoller zu gestalten, lassen Sie mich nur die Informationen über Mitarbeiter, die Professor sind.

$ awk '/ professor/ print' sample_file.txt

Der Befehl druckt nur die Zeilen/Einträge, die den Zeichenfolge „Professor“ enthalten. Daher haben wir mehr wertvolle Informationen aus den Daten abgeleitet.

Beispiel 3. Verwenden Sie awk, um die Datei so aufzuteilen, dass nur bestimmte Felder/Spalten gedruckt werden

Anstatt die gesamte Datei zu drucken, können Sie AWK dazu bringen, nur bestimmte Spalten der Datei zu drucken. Awk behandelt alle Wörter, die durch den weißen Raum getrennt sind, in einer Zeile als Spaltenaufzeichnung standardmäßig. Es speichert den Datensatz in einer $ n Variablen. Wobei $ 1 das erste Wort darstellt, 2 USD speichert das zweite Wort, $ 3 das vierte und so weiter. $ 0 speichert die gesamte Linie, damit die WHO -Zeile gedruckt wird, wie in Beispiel 1 erläutert.

Syntax:

$ awk 'print $ n,… .' Dateinamen.txt

Beispiel:

Der folgende Befehl druckt nur die erste Spalte (Name) und die zweite Spalte (Betreff) meiner Beispieldatei:

$ awk 'print $ 1, $ 2' sample_file.txt

Beispiel 4: Verwenden Sie awk, um die Anzahl der Zeilen zu zählen und zu drucken, in denen ein Muster übereinstimmt

Sie können awk angeben, die Anzahl der Zeilen zu zählen, in denen ein bestimmtes Muster übereinstimmt, und dann diese "Zählung" ausgeben.

Syntax:

$ awk '/muster_to_be_matched/++ cnt end print "count =", cnt'
Dateinamen.txt

Beispiel:

In diesem Beispiel möchte ich die Anzahl der Personen zählen, die das Thema „Englisch“ lehren. Daher werde ich den Befehl awk angeben, dass er dem Muster „Englisch“ übereinstimmt und die Anzahl der Zeilen ausdrucken soll, in denen dieses Muster übereinstimmt.

$ awk '/englisch/++ cnt end print "count =", cnt' sample_file.txt

Die Anzahl hier deutet darauf hin, dass 2 Personen Englisch aus den Beispieldatensätzen unterrichten.

Beispiel 5: Verwenden Sie awk, um nur Zeilen mit mehr als einer bestimmten Anzahl von Zeichen zu drucken

Für diese Aufgabe werden wir die integrierte awk-Funktion "Länge" verwenden, die als "Länge" bezeichnet werden. Diese Funktion gibt die Länge der Eingangszeichenfolge zurück. Wenn wir also möchten, dass awk nur Zeilen mit mehr als oder sogar weniger als die Anzahl der Zeichen druckt, können wir die Längenfunktion auf folgende Weise verwenden:

Für das Drucken von Zeilen mit Zeichen größer als eine Zahl:

$ awk 'Länge ($ 0)> n' Dateiname.txt

Für das Drucken von Zeilen mit Zeichen weniger als eine Zahl:

$ awk 'Länge ($ 0) < n' filename.txt

Wobei n die Anzahl der Zeichen ist, die Sie für eine Zeile angeben möchten.

Beispiel:

Der folgende Befehl druckt nur die Zeilen aus meiner Beispieldatei mit mehr als 30 Jahren:

$ awk 'Länge ($ 0)> 30' Sample_file.txt

Beispiel 6: Verwenden Sie awk, um die Befehlsausgabe in einer anderen Datei zu speichern

Durch die Verwendung des Umleitungsoperators '>' 'können Sie den Befehl awk verwenden, um seine Ausgabe in eine andere Datei zu drucken. So können Sie es verwenden:

$ awk 'criteria_to_print "Dateiname.txt> outputFile.txt

Beispiel:

In diesem Beispiel werde ich den Umleitungsoperator mit meinem awk -Befehl verwenden, um nur die Namen der Mitarbeiter (Spalte 1) in eine neue Datei zu drucken:

$ awk 'print $ 1' sample_file.TXT> Employee_Names.txt

Ich habe über die CAT -Befehle verifiziert, dass die neue Datei nur die Namen der Mitarbeiter enthält.

Beispiel 7: Verwenden Sie awk, um nicht leere Zeilen aus einer Datei zu drucken

AWK hat einige integrierte Befehle, mit denen Sie die Ausgabe filtern können. Zum Beispiel wird der Befehl nF verwendet, um eine Anzahl der Felder innerhalb des aktuellen Eingangsdatensatzes zu halten. Hier werden wir den Befehl nF verwenden, um nur die nicht leeren Zeilen der Datei zu drucken:

$ awk 'nf> 0' sample_file.txt

Offensichtlich können Sie den folgenden Befehl verwenden, um die leeren Zeilen zu drucken:

$ awk 'nf < 0' sample_file.txt

Beispiel 8: Verwenden Sie awk, um die Gesamtzeilen in einer Datei zu zählen

Eine andere integrierte Funktion namens NR hält eine Anzahl der Anzahl der Eingabebatensätze (normalerweise Zeilen) einer bestimmten Datei. Sie können diese Funktion in awk wie folgt verwenden, um die Anzahl der Zeilen in einer Datei zu zählen:

$ awk 'Ende print nr' sample_file.txt

Dies waren die grundlegenden Informationen, die Sie mit dem Aufteilen von Dateien mit dem awk -Befehl beginnen müssen. Sie können die Kombination dieser Beispiele verwenden, um aussagekräftigere Informationen aus Ihrer Stringsdatei über awk zu holen.