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