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

Awk-Einführungstutorial – 7 Awk-Druckbeispiele

Dies ist der erste Artikel in der neuen awk-Tutorial-Serie. Wir werden in den kommenden Wochen mehrere Artikel auf awk veröffentlichen, die alle Funktionen von awk mit praktischen Beispielen behandeln.

Lassen Sie uns in diesem Artikel die grundlegende awk-Arbeitsmethodik zusammen mit 7 praktischen awk-Druckbeispielen besprechen.

Hinweis: Sehen Sie sich unbedingt unsere frühere Sed-Tutorial-Reihe an.

Awk-Einführung und Druckvorgänge

Awk ist eine Programmiersprache, die eine einfache Bearbeitung strukturierter Daten und die Generierung formatierter Berichte ermöglicht. Awk steht für die Namen seiner Autoren „A ho, W Einberger und K ernighan“

Das Awk wird hauptsächlich zum Scannen und Verarbeiten von Mustern verwendet. Es durchsucht eine oder mehrere Dateien, um festzustellen, ob sie Zeilen enthalten, die mit den angegebenen Mustern übereinstimmen, und führt dann die zugehörigen Aktionen aus.

Einige der Schlüsselfunktionen von Awk sind:

  • Awk betrachtet eine Textdatei als Datensätze und Felder.
  • Wie eine gewöhnliche Programmiersprache hat Awk Variablen, Bedingungen und Schleifen
  • Awk hat arithmetische und Zeichenkettenoperatoren.
  • Awk kann formatierte Berichte erstellen

Awk liest aus einer Datei oder von seiner Standardeingabe und gibt an seiner Standardausgabe aus. Awk kommt nicht mit Nicht-Text-Dateien zurecht.

Syntax:

awk '/search pattern1/ {Actions}
     /search pattern2/ {Actions}' file

In der obigen awk-Syntax:

  • Suchmuster ist ein regulärer Ausdruck.
  • Aktionen – auszuführende Anweisung(en).
  • verschiedene Muster und Aktionen sind in Awk möglich.
  • file – Eingabedatei.
  • Einfache Anführungszeichen um das Programm sollen verhindern, dass die Shell keine ihrer Sonderzeichen interpretiert.

Awk-Arbeitsmethodik

  1. Awk liest die Eingabedateien zeilenweise.
  2. Für jede Zeile stimmt es mit dem angegebenen Muster in der angegebenen Reihenfolge überein, wenn Übereinstimmungen die entsprechende Aktion ausführen.
  3. Wenn kein Muster übereinstimmt, wird keine Aktion ausgeführt.
  4. In der obigen Syntax sind entweder Suchmuster oder Aktion optional, aber nicht beides.
  5. Wenn das Suchmuster nicht angegeben ist, führt Awk die angegebenen Aktionen für jede Zeile der Eingabe aus.
  6. Wenn die Aktion nicht angegeben ist, werden alle Zeilen ausgegeben, die mit den angegebenen Mustern übereinstimmen, was die Standardaktion ist.
  7. Leere Klammern ohne Aktion bewirken nichts. Es wird keine standardmäßige Druckoperation ausgeführt.
  8. Jede Anweisung in Aktionen sollte durch Semikolon getrennt werden.

Lassen Sie uns eine employee.txt-Datei mit folgendem Inhalt erstellen, die in den
unten erwähnten Beispielen verwendet wird.

$cat employee.txt
100  Thomas  Manager    Sales       $5,000
200  Jason   Developer  Technology  $5,500
300  Sanjay  Sysadmin   Technology  $7,000
400  Nisha   Manager    Marketing   $9,500
500  Randy   DBA        Technology  $6,000

Awk-Beispiel 1. Standardverhalten von Awk

Standardmäßig druckt Awk jede Zeile aus der Datei.

$ awk '{print;}' employee.txt
100  Thomas  Manager    Sales       $5,000
200  Jason   Developer  Technology  $5,500
300  Sanjay  Sysadmin   Technology  $7,000
400  Nisha   Manager    Marketing   $9,500
500  Randy   DBA        Technology  $6,000

Im obigen Beispiel ist kein Muster angegeben. Die Aktionen gelten also für alle Zeilen.
Aktion print ohne Argument druckt standardmäßig die ganze Zeile. Es werden also alle
Zeilen der Datei fehlerfrei gedruckt. Aktionen müssen mit in geschweiften Klammern eingeschlossen werden.

Awk Beispiel 2. Drucken Sie die Linien, die mit dem Muster übereinstimmen.

$ awk '/Thomas/
> /Nisha/' employee.txt
100  Thomas  Manager    Sales       $5,000
400  Nisha   Manager    Marketing   $9,500

Im obigen Beispiel werden alle Zeilen gedruckt, die mit „Thomas“ oder „Nisha“ übereinstimmen. Es hat zwei Muster. Awk akzeptiert eine beliebige Anzahl von Mustern, aber jeder Satz (Muster und die entsprechenden Aktionen) muss durch Zeilenumbruch getrennt werden.

Awk Beispiel 3. Nur bestimmtes Feld drucken.

Awk hat eine Reihe von eingebauten Variablen. Für jeden Datensatz, d. h. jede Zeile, wird der Datensatz standardmäßig durch Leerzeichen getrennt und in den $n-Variablen gespeichert. Wenn die Zeile 4 Wörter hat, wird sie in $1, $2, $3 und $4 gespeichert. $0 steht für eine ganze Zeile. NF ist eine eingebaute Variable, die die Gesamtzahl der Felder in einem Datensatz darstellt.

$ awk '{print $2,$5;}' employee.txt
Thomas $5,000
Jason $5,500
Sanjay $7,000
Nisha $9,500
Randy $6,000

$ awk '{print $2,$NF;}' employee.txt
Thomas $5,000
Jason $5,500
Sanjay $7,000
Nisha $9,500
Randy $6,000

Im obigen Beispiel stehen $2 und $5 für Name bzw. Gehalt. Wir können das Gehalt auch mit $NF erhalten, wobei $NF das letzte Feld darstellt. In der Druckanweisung ist „,“ ein Verkettungselement.

Awk-Beispiel 4. Initialisierung und letzte Aktion

Awk hat zwei wichtige Muster, die durch die Schlüsselwörter BEGIN und END angegeben werden.

Syntax: 

BEGIN { Actions}
{ACTION} # Action for everyline in a file
END { Actions }

# is for comments in Awk

Aktionen, die im BEGIN-Abschnitt angegeben sind, werden ausgeführt, bevor mit dem Lesen der Zeilen aus der Eingabe begonnen wird.
END-Aktionen werden ausgeführt, nachdem das Lesen und Verarbeiten der Zeilen aus der Eingabe abgeschlossen ist.

$ awk 'BEGIN {print "Name\tDesignation\tDepartment\tSalary";}
> {print $2,"\t",$3,"\t",$4,"\t",$NF;}
> END{print "Report Generated\n--------------";
> }' employee.txt
Name	Designation	Department	Salary
Thomas 	 Manager 	 Sales 	         $5,000
Jason 	 Developer 	 Technology 	 $5,500
Sanjay 	 Sysadmin 	 Technology 	 $7,000
Nisha 	 Manager 	 Marketing 	 $9,500
Randy 	 DBA 	 	 Technology 	 $6,000
Report Generated
--------------

Im obigen Beispiel druckt es die Überschrift und die letzte Datei für die Berichte.

Awk Beispiel 5. Finden Sie die Mitarbeiter, deren Mitarbeiter-ID größer als 200 ist

$ awk '$1 >200' employee.txt
300  Sanjay  Sysadmin   Technology  $7,000
400  Nisha   Manager    Marketing   $9,500
500  Randy   DBA        Technology  $6,000

Im obigen Beispiel ist das erste Feld ($1) die Mitarbeiter-ID. Wenn also $1 größer als 200 ist, dann führe einfach die standardmäßige Druckaktion aus, um die ganze Zeile zu drucken.

Awk Beispiel 6. Drucken Sie die Liste der Mitarbeiter in der Technologieabteilung

Jetzt ist der Abteilungsname als viertes Feld verfügbar, also müssen Sie prüfen, ob $4 mit der Zeichenfolge „Technologie“ übereinstimmt, wenn ja, drucken Sie die Zeile.

$ awk '$4 ~/Technology/' employee.txt
200  Jason   Developer  Technology  $5,500
300  Sanjay  Sysadmin   Technology  $7,000
500  Randy   DBA        Technology  $6,000

Der Operator ~ dient zum Vergleichen mit den regulären Ausdrücken. Wenn es mit der Standardaktion übereinstimmt, d. h. ganze Zeile drucken, wird  ausgeführt.

Awk Beispiel 7. Anzahl der Mitarbeiter in der Technologieabteilung drucken

Das folgende Beispiel prüft, ob die Abteilung Technologie ist, wenn ja, inkrementieren Sie in der Aktion einfach die Zählvariable, die im BEGIN-Abschnitt mit Null initialisiert wurde.

$ awk 'BEGIN { count=0;}
$4 ~ /Technology/ { count++; }
END { print "Number of employees in Technology Dept =",count;}' employee.txt
Number of employees in Tehcnology Dept = 3

Drucken Sie dann am Ende des Prozesses einfach den Wert von count aus, der Ihnen die Anzahl der Mitarbeiter in der Technologieabteilung gibt.

Empfohlene Lektüre

Sed- und Awk-101-Hacks, von Ramesh Natarajan . Ich verbringe mehrere Stunden am Tag in einer UNIX/Linux-Umgebung mit dem Umgang mit Textdateien (Daten-, Konfigurations- und Protokolldateien). Ich verwende Sed und Awk für alle meine Textbearbeitungsarbeiten. Basierend auf meiner Sed- und Awk-Erfahrung habe ich das Sed and Awk 101 Hacks eBook geschrieben, das 101 praktische Beispiele zu verschiedenen erweiterten Funktionen von Sed und Awk enthält, die Ihr UNIX / Linux-Leben verbessern werden. Auch wenn Sie Sed und Awk seit mehreren Jahren verwenden und dieses Buch noch nicht gelesen haben, tun Sie sich bitte einen Gefallen und lesen Sie dieses Buch. Sie werden von den Möglichkeiten der Dienstprogramme Sed und Awk begeistert sein.

Zusätzliche Awk-Artikel

  • Awk benutzerdefinierte Variablen mit 3 praktischen Beispielen
  • 8 leistungsstarke integrierte Awk-Variablen – FS, OFS, RS, ORS, NR, NF, FILENAME, FNR
  • 7 Beispiele für leistungsstarke Awk-Operatoren (unäre, binäre, arithmetische, String-, Zuweisungs-, Bedingungs-, Reg-Ex-Awk-Operatoren)
  • 4 Beispiele für Awk-If-Anweisungen ( if, if else, if else if, :? )
  • In der Schleife gefangen? Awk While, Do While, For Loop, Break, Continue, Exit Beispiele

Linux
  1. Linux-CD-Befehls-Tutorial für Anfänger (8 Beispiele)

  2. Awk-Tutorial:Awk-Variablen verstehen mit 3 praktischen Beispielen

  3. 4 Beispiele für Awk-If-Anweisungen ( if, if else, if else if, :? )

  4. awk-Befehlsbeispiele unter Linux

  5. lpr-Befehlsbeispiele unter Linux

Linux w Command Tutorial für Anfänger (5 Beispiele)

Linux ss Command Tutorial für Anfänger (8 Beispiele)

Linux-awk-Befehl mit 10 Beispielen

Regex-Tutorial für Linux-Beispiele (Sed &AWK).

Ping-Tutorial:15 effektive Beispiele für Ping-Befehle

Bash Scripting Einführungstutorial mit 5 praktischen Beispielen