Для gawk 4.2 ответ здесь: https://www.gnu.org/software/gawk/manual/html_node/Nonfatal.html. Но кажется, что PROCINFO ["NONFATAL"] отсутствует в более ранних версиях.
5.10 Включение нефатального вывода
В этом разделе описывается специфическая для gawk функция.
В стандартном awk вывод с print или printf в несуществующий файл или какая-либо другая ошибка ввода-вывода (например, заполнение диска) являетсяфатальная ошибка.
$ gawk 'BEGIN {print "hi"> "/ no / such / file"}' error → gawk: cmd.строка: 1: fatal: невозможно перенаправить в `/ no / such / file '(нет ошибки → такой файл или каталог)
gawk позволяет обнаружить, что произошла ошибка, что позволяет вамвосстановиться после ошибки или, по крайней мере, распечатать сообщение об ошибке по вашему выбору перед выходом.Вы можете сделать это одним из двух способов:
For all output files, by assigning any value to PROCINFO["NONFATAL"].
On a per-file basis, by assigning any value to PROCINFO[filename, "NONFATAL"]. Here, filename is the name of the file to which you wish
вывод быть нефатальным.
После того, как вы включили нефатальный вывод, вы должны проверять ERRNO после каждого соответствующего оператора print или printf, чтобы убедиться, что что-то пошло не так.Также рекомендуется инициализировать ERRNO нулем, прежде чем пытаться выполнить вывод
Используя следующую программу awk:
$ cat nonFatal.awk
BEGIN {
PROCINFO["NONFATAL"] = 1
ERRNO = 0
print "hi" > "/no/such/file"
if (ERRNO) {
print("Output failed:", ERRNO) > "/dev/stderr"
exit 1
}
}
ошибка по-прежнему фатальна в gawk 4.0 и 4.1
$ gawk -f nonFatal.awk
gawk: nonFatal.awk:4: fatal: can't redirect to `/no/such/file' (No such file or directory)
Но в gawk 4.2.1 это работает (я скомпилировал gawk 4.2.1 как gawk-4.2.1):
$ ./gawk-4.2.1 -f /var/tmp/nonFatal.awk
Output failed: No such file or directory