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


1.4 Un esempio che usa due regole

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