Successivo: Istruzioni/Righe, Precedente: Due regole, Su: Per iniziare [Contenuti][Indice]
Dopo aver imparato a eseguire alcuni semplici compiti, vediamo cosa possono
fare i tipici programmi awk
.
Questo esempio mostra come awk
può essere usato per riassumere,
selezionare e riordinare l’output di un altro comando. Sono usate
funzionalità di cui non si è ancora parlato, quindi non ci si deve preoccupare
se alcuni dettagli risulteranno oscuri:
ls -l | awk '$6 == "Nov" { somma += $5 } END { print somma }'
Questo comando stampa il numero totale di byte in tutti i file contenuti nella directory corrente, la cui data di modifica è novembre (di qualsiasi anno). La parte ‘ls -l’ dell’esempio è un comando di sistema che fornisce un elenco dei file in una directory, con anche la dimensione di ogni file e la data di ultima modifica. Il suo output è del tipo:
-rw-r--r-- 1 arnold user 1933 Nov 7 13:05 Makefile -rw-r--r-- 1 arnold user 10809 Nov 7 13:03 awk.h -rw-r--r-- 1 arnold user 983 Apr 13 12:14 awk.tab.h -rw-r--r-- 1 arnold user 31869 Jun 15 12:20 awkgram.y -rw-r--r-- 1 arnold user 22414 Nov 7 13:03 awk1.c -rw-r--r-- 1 arnold user 37455 Nov 7 13:03 awk2.c -rw-r--r-- 1 arnold user 27511 Dec 9 13:07 awk3.c -rw-r--r-- 1 arnold user 7989 Nov 7 13:03 awk4.c
Il primo campo contiene le autorizzazioni di lettura/scrittura [r/w], il secondo il numero dei collegamenti al file [cioè il numero di nomi con cui il file è conosciuto], e il terzo campo identifica il proprietario del file. Il quarto campo identifica il gruppo a cui appartiene il file. Il quinto campo contiene la dimensione del file, in byte. Il sesto, settimo e ottavo campo contengono il mese, il giorno e l’ora, rispettivamente, in cui il file è stato modificato. Infine, il nono campo contiene il nome-file.
L’espressione ‘$6 == "Nov"’ nel nostro programma awk
controlla
se il sesto campo dell’output di ‘ls -l’ corrisponda alla stringa
‘Nov’. Ogni volta che una riga ha la stringa
‘Nov’ come suo sesto campo, awk
esegue l’azione
‘somma += $5’. Questo aggiunge il quinto campo (la dimensione del file)
alla variabile somma
. Come risultato, quando awk
ha finito
di leggere tutte le righe in input, somma
contiene la somma totale
delle dimensioni dei file che corrispondono al criterio di ricerca.
(Ciò funziona contando sul fatto che le variabili awk
sono
automaticamente inizializzate a zero.)
Dopo che l’ultima riga dell’output di ls
è stata elaborata, la
regola END
viene eseguita e viene stampato il valore di somma
.
In questo esempio, il valore di somma
è 80600.
Queste tecniche più avanzate di awk
sono trattate in
sezioni
successive (vedi la sezione Azioni). Prima di poter passare a una
programmazione più avanzata con awk
, è necessario sapere come
awk
interpreta i file in input e visualizza quelli in output.
Modificando campi e usando l’istruzione print
è possibile produrre
dei rapporti molto utili ed esteticamente gradevoli.
Successivo: Istruzioni/Righe, Precedente: Due regole, Su: Per iniziare [Contenuti][Indice]