Sto usando awk
per la formattazione di un file di input in un file di output. Ho diversi pattern per riempire variabili (come "alcuni pattern" nell'esempio). Queste variabili vengono stampate nel formato richiesto nel blocco END
. L'output deve essere eseguito lì perché l'ordine di comparsa nel file di input non è garantito, ma l'ordine nel file di output deve essere sempre lo stesso.awk: catch `exit 'nel blocco END
BEGIN {
FS = "=|,"
}
/some pattern/ {
if ($1 == 8) {
var = $1
} else {
# Incorrect field value
exit 1
}
}
END {
# Output the variables
print var
}
Quindi il mio problema è la dichiarazione exit
nel modello. Se c'è qualche errore e questo comando è invocato, non ci dovrebbe essere alcun output o al massimo un messaggio di errore. Ma come dice il manuale di gawk (here), se il comando exit
viene richiamato in un blocco di modello, il blocco END
verrà eseguito almeno. C'è un modo per prendere il exit
come:
if (!exit_invoked) {
print var
}
o qualche altro modo per evitare la stampa l'uscita nel blocco END
?
Stefan
edit: usata la soluzione da Shellter.
Grazie, non ho pensato a questa semplice soluzione;) L'ho inserito in una funzione per non dimenticare il set di "exit_invoked'. Stefan – Stefan
@Stefan: buona idea. Come promemoria, che hai in gioco quella variabile, potresti voler impostare il blocco BEGIN, ad esempio exit_invoked = 0'. Alcuni si lamenteranno che non è necessario e ridondante. Non lo farei da solo, ma è una buona tecnica auto-documentante. YRMV. In bocca al lupo. – shellter
Lo farò visto che non scrivo il programma 'awk' da solo. Grazie. – Stefan