Next: APPLICAZIONI SU UNIX
Up: awk
Previous: Funzioni predefinite
Contents
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: APPLICAZIONI SU UNIX
Up: awk
Previous: Funzioni predefinite
Contents
Giorgio F. Signorini
2011-11-14