Successivo: Istruzione nextfile, Precedente: Istruzione continue, Su: Istruzioni [Contenuti][Indice]
next
L’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]