Successivo: , Precedente: , Su: Per iniziare   [Contenuti][Indice]


1.5 Un esempio più complesso

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: , Precedente: , Su: Per iniziare   [Contenuti][Indice]