Successivo: Istruzione nextfile, Precedente: Istruzione continue, Su: Istruzioni [Contenuti][Indice]
nextL’istruzione next fa sì che awk termini immediatamente
l’elaborazione del record corrente e proceda a elaborare il record successivo.
Ciò vuol dire che nessuna delle eventuali regole successive viene eseguita
per il record corrente e che il resto delle azioni presenti nella
regola correntemente in esecuzione non viene eseguito.
Si confronti quanto sopra con quel che fa la funzione getline
(vedi la sezione Richiedere input usando getline). Anch’essa fa sì che awk legga il record
successivo immediatamente, ma non altera il flusso del controllo in alcun
modo (cioè, il resto dell’azione in esecuzione prosegue con il nuovo record
in input).
Al livello più alto, l’esecuzione di un programma awk è un ciclo
che legge un record in input e quindi confronta il criterio di ricerca di
ciascuna regola con il record stesso. Se si vede questo ciclo come un
for il cui corpo contiene le regole, l’istruzione next è analoga
a un’istruzione continue. Salta, cioè, alla fine del corpo di questo
ciclo implicito
ed esegue l’incremento (ovvero legge un altro record).
Per esempio, si supponga che un programma awk agisca solo su record
che hanno quattro campi, e che non dovrebbe terminare con un errore se trova
dei record in input non validi. Per evitare di complicare il resto del
programma, si può scrivere una regola “filtro” a inizio programma, come
mostrato in questo esempio:
NF != 4 {
printf("%s:%d: salto: NF != 4\n", FILENAME, FNR) > "/dev/stderr"
next
}
Siccome è presente un next,
le regole successive del programma non elaboreranno i record non validi.
Il messaggio è ridiretto al flusso in output
standard error, sul quale vanno scritti i messaggi di errore.
Per maggiori dettagli, si veda
Nomi-file speciali in gawk.
Se l’istruzione next provoca il raggiungimento della fine del file
in input, vengono eseguite le eventuali regole END presenti.
Vedi la sezione I criteri di ricerca speciali BEGIN ed END.
L’istruzione next non è consentita all’interno delle regole
BEGINFILE ed ENDFILE. Vedi la sezione I criteri di ricerca speciali BEGINFILE ed ENDFILE.
Secondo lo standard POSIX, il comportamento di awk è indefinito
se next è usato in una regola BEGIN o END.
gawk considera questo come un errore di sintassi. Sebbene POSIX
non proibisca di usarlo,
molte altre implementazioni di awk non consentono che l’istruzione
next sia usata all’interno del corpo di funzioni.
(vedi la sezione Funzioni definite dall’utente).
Come tutte le altre istruzioni next, un’istruzione next all’interno del
corpo di una funzione legge il record successivo e inizia a elaborarlo
a partire dalla prima regola del programma.
Successivo: Istruzione nextfile, Precedente: Istruzione continue, Su: Istruzioni [Contenuti][Indice]