Questo articolo fa parte della serie Awk Tutorial ed esempi in corso. Come qualsiasi altro linguaggio di programmazione, anche Awk ha variabili definite dall'utente e variabili integrate.
In questo articolo esaminiamo come definire e utilizzare le variabili awk .
- Le variabili Awk devono iniziare con la lettera, seguita da quella che può essere composta da caratteri alfanumerici o underscore.
- Le parole chiave non possono essere utilizzate come variabile awk
- Awk non supporta la dichiarazione di variabili come altri linguaggi di programmazione
- È sempre meglio inizializzare le variabili awk nella sezione BEGIN, che verrà eseguita solo una volta all'inizio.
- Non ci sono tipi di dati in Awk. Se una variabile awk deve essere trattata come un numero o come una stringa dipende dal contesto in cui viene utilizzata.
Ora esaminiamo alcuni semplici esempi per imparare a utilizzare le variabili awk definite dall'utente.
Esempio 1 Awk:fatturazione per i libri
In questo esempio, il file di input bookdetails.txt contiene record con campi:numero articolo, nome libro, quantità e tariffa per libro.
$ 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
Ora il seguente script Awk legge ed elabora il file bookdetails.txt sopra e genera un rapporto che mostra — tariffa di ogni libro venduto e importo totale per tutti i libri venduti.
Finora abbiamo visto Awk legge i comandi dalla riga di comando, ma Awk può anche leggere i comandi dal file usando l'opzione -f.
Syntax: $ awk -f script-filename inputfilename
Ora il nostro script Awk per il calcolo della fatturazione per i libri è riportato di seguito.
$ 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; }
Nello script sopra,
- Awk sezione INIZIO inizializza la variabile total. itemno, total, book, bookamount sono variabili awk definite dall'utente.
- Nell'Awk Azione sezione, Quantità*prezzo del libro verrà memorizzato in una variabile denominata importo del libro. Ogni importo del libro verrà aggiunto al totale.
- Finalmente nell'Awk END sezione, la variabile totale avrà l'importo totale.
Ora esegui lo script book-calculation.awk per generare il rapporto che mostra ogni tariffa del libro e importo totale come mostrato di seguito.
$ 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
Esempio Awk 2. Calcolo del voto dello studente
In questo esempio, crea un file di input "student-marks.txt" con il seguente contenuto:nome dello studente, numero di ruolo, punteggio Test1, punteggio Test2 e punteggio 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
Ora il seguente script Awk calcolerà e genererà il rapporto per mostrare i voti medi di ogni studente, la media dei punteggi Test1, Test2 e Test3.
$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; }
Nello script Awk sopra,
- In Awk BEGIN sezione tutte le variabili awk sono inizializzate a zero. test1, test2, test3 e total sono variabili awk definite dall'utente.
- Nella AZIONE Awk sezione, $3, $4, $5 sono rispettivamente i punteggi del Test1, del Test2 e del Test3. la variabile totale è l'aggiunta di 3 punteggi del test per ogni studente. La variabile awk test1, test2 e test3 ha i punteggi totali di ogni test corrispondente.
- Quindi in Awk END sezione, dividendo il totale di ogni test per il numero totale di record (es. Studente) otterrai il punteggio medio. NR è una variabile incorporata di Awk che fornisce il numero totale di record in input.
Esempio Awk 3. Report HTML per i dettagli degli studenti
Nei due esempi precedenti, abbiamo visto la variabile awk che ha numeri come valori. Questo esempio mostra lo script awk per generare il rapporto html per il nome degli studenti e il loro numero di ruolo.
$ 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>"; }
Usa lo stesso file di input student-marks.txt che abbiamo creato nell'esempio sopra.
$ 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>
Possiamo memorizzare l'output sopra, che fornisce la seguente tabella html. Nello script precedente, le variabili chiamate name e rollno sono variabili di tipo stringa, perché vengono utilizzate nel contesto di una stringa.
Student Details | |
---|---|
Jones | 2143 |
Gondrol | 2321 |
RinRao | 2122 |
Edwin | 2537 |
Dayan | 2415 |
Lettura consigliata