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

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

Dieser Artikel ist Teil der laufenden Awk-Tutorial- und Beispielserie. Wie jede andere Programmiersprache hat auch Awk benutzerdefinierte Variablen und eingebaute Variablen.

In diesem Artikel sehen wir uns an, wie man awk-Variablen definiert und verwendet .

  • Awk-Variablen sollten mit dem Buchstaben beginnen, gefolgt von alphanumerischen Zeichen oder Unterstrichen.
  • Schlüsselwörter können nicht als awk-Variable verwendet werden
  • Awk unterstützt keine Variablendeklaration wie andere Programmiersprachen
  • Es ist immer besser, awk-Variablen im Abschnitt BEGIN zu initialisieren, die am Anfang nur einmal ausgeführt werden.
  • Es gibt keine Datentypen in Awk. Ob eine awk-Variable als Zahl oder als String zu behandeln ist, hängt vom Kontext ab, in dem sie verwendet wird.

Sehen wir uns nun einige einfache Beispiele an, um zu lernen, wie benutzerdefinierte awk-Variablen verwendet werden.

Awk-Beispiel 1:Rechnungsstellung für Bücher

In diesem Beispiel enthält die Eingabedatei bookdetails.txt Datensätze mit Feldern – Artikelnummer, Buchname, Menge und Preis pro Buch.

$ cat bookdetails.txt
1 Linux-programming 2 450
2 Advanced-Linux 3 300
3 Computer-Networks 4 400
4 OOAD&UML 3 450
5 Java2 5 200

Nun liest und verarbeitet das folgende Awk-Skript die obige bookdetails.txt-Datei und generiert einen Bericht, der den Preis für jedes verkaufte Buch und den Gesamtbetrag für alle verkauften Bücher anzeigt.

Bisher haben wir gesehen, dass Awk die Befehle von der Befehlszeile liest, aber Awk kann die Befehle auch mit der Option -f aus der Datei lesen.

Syntax:

$ awk -f script-filename inputfilename

Jetzt ist unser Awk-Skript für die Rechnungsberechnung für Bücher unten angegeben.

$ cat book-calculation.awk
BEGIN {
	total=0;
}
{
	itemno=$1;
	book=$2;
	bookamount=$3*$4;
	total=total+bookamount;
	print itemno," ", book,"\t","$"bookamount;
}
END {
	print "Total Amount = $"total;
}

Im obigen Skript,

  • Awk BEGIN-Abschnitt initialisiert die Variable total. itemno, total, book, bookamount sind benutzerdefinierte awk-Variablen.
  • In der Awk Aktion Abschnitt Menge*Buchpreis wird in einer Variablen namens Buchbetrag gespeichert. Jeder Buchbetrag wird mit der Gesamtsumme addiert.
  • Schließlich im Awk ENDE Abschnitt hat die Gesamtvariable den Gesamtbetrag.

Führen Sie nun das Skript book-calculation.awk aus, um den Bericht zu generieren, der jeden Buchpreis und Gesamtbetrag wie unten gezeigt anzeigt.

$ awk -f book-calculation.awk bookdetails.txt
1   Linux-programming 	 $900
2   Advanced-Linux 	 $900
3   Computer-Networks 	 $1600
4   OOAD&UML 	 $1350
5   Java2 	 $1000
Total Amount = $5750

Awk-Beispiel 2. Schülernotenberechnung

Erstellen Sie in diesem Beispiel eine Eingabedatei „student-marks.txt“ mit folgendem Inhalt:Name des Schülers, Rollennummer, Ergebnis in Test1, Ergebnis in Test2 und Ergebnis in Test3.

$ cat student-marks.txt
Jones 2143 78 84 77
Gondrol 2321 56 58 45
RinRao 2122 38 37 65
Edwin 2537 78 67 45
Dayan 2415 30 47 20

Nun wird das folgende Awk-Skript den Bericht berechnen und generieren, um die Durchschnittsnoten jedes Schülers, den Durchschnitt der Test1-, Test2- und Test3-Ergebnisse anzuzeigen.

$cat student.awk

BEGIN {
	test1=0;
	test2=0;
	test3=0;
	print "Name\tRollNo\t Average Score";

}
{
	total=$3+$4+$5;
	test1=test1+$3;
	test2=test2+$4;
	test3=test3+$5;
	print $1"\t"$2"\t",total/3;
}
END{
	print "Average of Test1="test1/NR;
	print "Average of Test2="test2/NR;
	print "Average of Test3="test3/NR;

}

Im obigen Awk-Skript

  • Im Awk BEGIN Abschnitt werden alle awk-Variablen auf Null initialisiert. test1, test2, test3 und total sind benutzerdefinierte awk-Variablen.
  • In der Awk-AKTION Abschnitt, $ 3, $ 4, $ 5 sind Test1-, Test2- bzw. Test3-Ergebnisse. Gesamtvariable ist die Addition von 3 Testergebnissen für jeden Schüler. Die awk-Variablen test1, test2 und test3 enthalten die Gesamtpunktzahlen jedes entsprechenden Tests.
  • So im Awk END Wenn Sie jede Testsumme durch die Gesamtzahl der Datensätze (d. h. Schüler) dividieren, erhalten Sie die durchschnittliche Punktzahl. NR ist eine integrierte Awk-Variable was die Gesamtzahl der Datensätze in der Eingabe ergibt.

Awk-Beispiel 3. HTML-Bericht für Schülerdetails

In den beiden obigen Beispielen haben wir eine awk-Variable gesehen, die Zahlen als Werte hat. Dieses Beispiel zeigt ein awk-Skript zum Generieren des HTML-Berichts für den Schülernamen und seine Rollennummer.

$ cat string.awk
BEGIN{
title="AWK";
print "<html>\n<title>"title"</title><body bgcolor=\"#ffffff\">\n<table border=1><th  colspan=2 align=centre>Student Details</th>";

}
{
name=$1;
rollno=$2;
print "<tr><td>"name"</td><td>"rollno"</td></tr>";
   
}
END {
    print "</table></body>\n</html>";
}

Verwenden Sie dieselbe student-marks.txt-Eingabedatei, die wir im obigen Beispiel erstellt haben.

$ awk -f string.awk student-marks.txt
<html>
<title>AWK</title><body bgcolor="#ffffff">
<table border=1><th  colspan=2 align=centre>Student Details</th>
<tr><td>Jones</td><td>2143</td></tr>
<tr><td>Gondrol</td><td>2321</td></tr>
<tr><td>RinRao</td><td>2122</td></tr>
<tr><td>Edwin</td><td>2537</td></tr>
<tr><td>Dayan</td><td>2415</td></tr>
</table></body>
</html>

Wir können die obige Ausgabe speichern, was die folgende HTML-Tabelle ergibt. Im obigen Skript sind die Variablen name und rollno String-Variablen, da sie im String-Kontext verwendet werden.

Student Details
Jones 2143
Gondrol 2321
RinRao 2122
Edwin 2537
Dayan 2415

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.


Linux
  1. Awk-Einführungstutorial – 7 Awk-Druckbeispiele

  2. AWK-Arrays erklärt mit 5 praktischen Beispielen

  3. Bash Shell Exit Status Tutorial mit praktischen Beispielen

  4. Perl-Array-Referenz- und Dereferenzierungs-Tutorial mit praktischen Beispielen

  5. Echo-Befehl mit praktischen Beispielen

10 praktische Beispiele für Regex mit grep

Unix Sed Tutorial:Mehrzeilige Dateioperation mit 6 praktischen Beispielen

Bash Scripting Einführungstutorial mit 5 praktischen Beispielen

Bash-Variablen-Tutorial – 6 praktische Bash-Beispiele für globale und lokale Variablen

Das ultimative Tar Command Tutorial mit 10 praktischen Beispielen

Tutorial zu Bash-Shell-Funktionen mit 6 praktischen Beispielen