Successivo: , Precedente: , Su: Criteri di ricerca e azioni   [Contenuti][Indice]


7.2 Usare variabili di shell in programmi

I programmi awk sono spesso usati come componenti di programmi più ampi, scritti in un linguaggio di shell. Per esempio, è molto comune usare una variabile di shell per specificare un criterio di ricerca che il programma awk deve poi individuare. Ci sono due modi per rendere disponibile il valore di una variabile di shell all’interno di un programma awk.

Un modo comune è quello di usare i doppi apici per sostituire il valore della variabile nel progamma awk contenuto nello script:

Per esempio, si consideri il programma seguente:

printf "Immettere il criterio di ricerca: "
read criterio_di_ricerca
awk "/$criterio_di_ricerca/ "'{ num_trov++ }
     END { print num_trov, "occorrenze trovate" }' /nome/file/dati

Il programma awk consiste di due pezzi di testo tra apici che, concatenati insieme, formano il programma. La prima parte è tra doppi apici, per consentire la sostituzione della variabile di shell criterio_di_ricerca contenuta al loro interno. La seconda parte è racchiusa tra apici singoli.

La sostituzione di variabile attraverso gli apici funziona, ma può facilmente generare difficoltà. Richiede una buona comprensione delle regole per l’uso degli apici nella shell (vedi la sezione Uso di apici nella shell.), e spesso è difficile accoppiare i vari apici quando si legge il programma.

Un metodo migliore è quello di usare la funzionalità di assegnamento delle variabili di awk (vedi la sezione Assegnare una variabile dalla riga di comando) per assegnare il valore di una variabile di shell a una variabile di awk. Poi si possono usare regexp dinamiche come criterio di ricerca (vedi la sezione Usare regexp dinamiche). Quanto segue mostra come sarebbe l’esempio precedente usando questa tecnica:

printf "Immettere il criterio di ricerca: "
read criterio_di_ricerca
awk -v crit="$criterio_di_ricerca" '$0 ~ crit { num_trov++ }
     END { print num_trov, "occorrenze trovate" }' /nome/file/dati

Adesso il programma awk è solo una stringa tra apici semplici. L’assegnamento ‘-v crit="$criterio_di_ricerca"’ richiede ancora doppi apici, per il caso in cui uno spazio vuoto sia presente nel valore di $criterio_di_ricerca. La variabile awk crit potrebbe avere come nome anche criterio_di_ricerca, ma ciò potrebbe essere causa di confusione. Usare una variabile permette una maggiore flessibilità, poiché la variabile può essere usata in ogni parte del programma — per stamparla, per indicizzare un vettore, o per qualsiasi altro scopo — senza che sia necessario l’artificio di doverla inserire usando gli apici.


Successivo: , Precedente: , Su: Criteri di ricerca e azioni   [Contenuti][Indice]