Używam awk
do formatowania pliku wejściowego w pliku wyjściowym. Mam kilka wzorów do wypełnienia zmiennych (np. "Jakiś wzór" w przykładzie). Te zmienne są drukowane w wymaganym formacie w bloku END
. Dane wyjściowe muszą być tam wykonane, ponieważ kolejność pojawiania się w pliku wejściowym nie jest gwarantowana, ale kolejność w pliku wyjściowym musi być zawsze taka sama.awk: catch `exit 'w bloku END
BEGIN {
FS = "=|,"
}
/some pattern/ {
if ($1 == 8) {
var = $1
} else {
# Incorrect field value
exit 1
}
}
END {
# Output the variables
print var
}
Więc mój problem jest oświadczenie w strukturze exit
. Jeśli wystąpi błąd i zostanie wywołane to polecenie, nie powinno być żadnego wyjścia lub co najwyżej komunikatu o błędzie. Ale jak głosi instrukcja gawk (here), jeśli polecenie exit
zostanie wywołane w bloku wzorów, to przynajmniej zostanie wykonany blok END
. Czy istnieje jakiś sposób, aby złapać exit
jak:
if (!exit_invoked) {
print var
}
lub jakiś inny sposób, aby uniknąć drukowania wyjście w bloku END
?
Stefan
edit: Używany roztwór z shellter.
Dziękuję, nie myśl o tym prostym rozwiązaniu;) Spakuję to w funkcję, aby nie zapomnieć zestawu 'exit_invoked'. Stefan – Stefan
@Stefan: Dobry pomysł. Przypominamy, że masz tę zmienną w grze, możesz ustawić ją w bloku BEGIN, tj. 'Exit_invoked = 0'. Niektórzy będą narzekać, że jest to niepotrzebne i zbędne. Sam bym tego nie zrobił, ale jest to dobra technika samokreślania. YRMV. Powodzenia. – shellter
Zrobię to, ponieważ nie piszę programu 'awk' dla siebie. Dzięki. – Stefan