Successivo: Maggiore sofisticazione, Precedente: Molto semplice, Su: Per iniziare [Contenuti][Indice]
Il programma awk
legge il file in input una riga alla volta.
Per ogni riga awk
controlla la corrispondenza con ogni regola.
Se viene trovata più di una corrispondenza, vengono eseguite altrettante
azioni, nell’ordine in cui appaiono nel programma awk
.
Se non viene trovata nessuna corrispondenza, non viene eseguita alcuna azione.
Dopo aver elaborato tutte le regole che hanno corrispondenza con la riga (e
puó darsi che nessuna corrisponda), awk
legge la riga successiva. Comunque
vedi la sezione L’istruzione next
,
e anche vedi la sezione L’istruzione nextfile
.)
Si prosegue così finché il programma raggiunge la fine del file.
Per esempio, il seguente programma awk
contiene due regole:
/12/ { print $0 } /21/ { print $0 }
La prima regola ha la stringa ‘12’ da cercare e ‘print $0’ come azione. La seconda regola ha la stringa ‘21’ da cercare e ha ancora ‘print $0’ come azione. L’azione di ciascuna regola è racchiusa in una coppia di parentesi graffe.
Questo programma stampa ogni riga che contiene la stringa ‘12’ oppure la stringa ‘21’. Se una riga contiene entrambe le stringhe, è stampata due volte, una volta per ogni regola.
Questo è ciò che capita se eseguiamo questo programma sui nostri file-dati, mail-list e inventory-shipped:
$ awk '/12/ { print $0 } > /21/ { print $0 }' mail-list inventory-shipped -| Anthony 555-3412 anthony.asserturo@hotmail.com A -| Camilla 555-2912 camilla.infusarum@skynet.be R -| Fabius 555-1234 fabius.undevicesimus@ucb.edu F -| Jean-Paul 555-2127 jeanpaul.campanorum@nyu.edu R -| Jean-Paul 555-2127 jeanpaul.campanorum@nyu.edu R -| Jan 21 36 64 620 -| Apr 21 70 74 514
Si noti che la riga che inizia con ‘Jean-Paul’ nel file mail-list è stata stampata due volte, una volta per ogni regola.
Successivo: Maggiore sofisticazione, Precedente: Molto semplice, Su: Per iniziare [Contenuti][Indice]