Successivo: I/O e BEGIN/END, Su: BEGIN/END [Contenuti][Indice]
Una regola BEGIN
è eseguita solo una volta, prima che sia letto il
primo record in input. Analogamente, una regola END
è eseguita
solo una volta, dopo che tutto l’input è già stato letto. Per esempio:
$ awk ' > BEGIN { print "Analisi di \"li\"" } > /li/ { ++n } > END { print "\"li\" è presente in", n, "record." }' mail-list -| Analisi di "li" -| "li" è presente in 4 record.
Questo programma trova il numero di record nel file in input
mail-list che contengono la stringa ‘li’. La regola BEGIN
stampa un titolo per il rapporto. Non c’è bisogno di usare la regola
BEGIN
per inizializzare il contatore n
a zero, poiché
awk
lo fa
automaticamente (vedi la sezione Variabili).
La seconda regola incrementa la variabile n
ogni volta che si legge
un record che soddisfa il criterio di ricerca ‘li’. La regola END
stampa il valore di n
alla fine del programma.
I criteri di ricerca speciali BEGIN
ed END
non possono essere
usati negli intervalli,
o con operatori booleani (in effetti, non possono essere combinati con nessun
altro operatore).
Un programma awk
può avere molte regole BEGIN
e/o END
.
Queste sono eseguite nell’ordine in cui compaiono nel programma: tutte le
regole BEGIN
a inizio programma e tutte le regole END
a fine programma.
Le regole BEGIN
ed END
possono apparire in qualsiasi
posizione all’interno del programma.
Questa funzionalità è stata aggiunta nella versione 1987 di awk
ed
è inclusa nello standard POSIX.
La versione originale (1978) di awk
richiedeva che la regola
BEGIN
fosse posta all’inizio del programma, e la regola
END
alla fine del programma, e solo una regola per tipo era ammessa.
Ciò non è più obbligatorio, ma è una buona idea continuare a seguire questo
modello per migliorare l’organizzazione e la leggibilità del programma.
Regole multiple BEGIN
ed END
sono utili per scrivere funzioni
di libreria, poiché ogni file di libreria può avere la sua propria regola
BEGIN
e/o END
per fare la propria inizializzazione e/o pulizia.
L’ordine in cui le funzioni di libreria sono menzionate nella riga dei comandi
determina l’ordine in cui le rispettive regole BEGIN
ed END
sono
eseguite. Per questo motivi, occorre prestare attenzione nello scrivere tali
regole nei file di libreria, in modo che non sia importante
l’ordine in cui tali regole vengono eseguite.
Vedi la sezione Opzioni sulla riga di comando per maggiori informazioni sull’uso di funzioni di libreria.
Vedi la sezione Una libreria di funzioni awk
,
per parecchie utili funzioni di libreria.
Se un programma awk
ha solo regole BEGIN
e nessun’altra
regola, il programma esce dopo aver eseguito le regole
BEGIN
.38 Tuttavia, se
una regola END
esiste, l’intero input è letto, anche se non sono
presenti altre regole nel programma. Ciò viene fatto necessariamente
per permettere che
la regola END
faccia uso delle variabili FNR
e NR
.
La versione originale di awk
continuava a
leggere e ignorare i record in input fino alla fine del file.
Successivo: I/O e BEGIN/END, Su: BEGIN/END [Contenuti][Indice]