next up previous contents
Next: APPLICAZIONI SU UNIX Up: awk Previous: Funzioni predefinite   Contents

un semplice esempio

Nel file ~infochim/wrk/esercitaz sono riportati i punteggi ottenuti nelle prime due esercitazioni dai vari studenti del corso. Il file contiene nell'ordine: nome account, turno, punteggio eserc.1, punteggio eserc. 2:

acciai       D 2 5

allegra      A 2 3

allegri      A 0 0

arturoni     A 2 5

...

La media dei punteggi della prima esercitazione si ottiene con il seguente programma awk:

                {s=s+$3;n=n+1}

END             {print "media= ",s/n}

Possiamo scrivere questo programma nel file media.awk e eseguire il comando

awk -f media.awk esercitaz
Sull'output viene riportata la risposta:

media= 1.54082
Se ora vogliamo il punteggio medio di chi appartiene al turno A, possiamo farlo introducendo un pattern nella prima istruzione:

/A/             {s=s+$3;n=n+1}
Questo sistema funziona solo se siamo sicuri che l'account è sempre in minuscolo, e che quindi la stringa "A" può essere presente solo nel campo del turno.

Un sistema più corretto e sicuro è richiedere che la A si trovi nel secondo campo. In questo caso il pattern deve essere non un'espressione regolare, ma un'espressione relazionale:

$2=="A"         {s=s+$3;n=n+1}
Se invece vogliamo stampare in fondo a ogni riga la somma dei due punteggi:

                {print $0, $3+$4}
Questa istruzione invece stampa solo le righe relative a studenti che hanno preso almeno 4 nella seconda esercitazione:

$4 > 3


next up previous contents
Next: APPLICAZIONI SU UNIX Up: awk Previous: Funzioni predefinite   Contents
Giorgio F. Signorini 2011-11-14