print
中的 awk
语句可能不成功的原因有几个:没有写入指定文件的权限、文件不存在且 awk 无法创建它等。如何测试 awk
是否成功print
语句?我尝试了以下方法:
$ cat printError.awk
BEGIN {
if (! (print("Hello") > "/this/doesnt/exist")) {
print "Could not print"
}
}
但它给出了一个语法错误,我认为是因为 print 是一个语句而不是一个函数。
$ awk -f printError.awk
awk: printError.awk:2: if (! (print("Hello") > "/this/doesnt/exist")) {
awk: printError.awk:2: ^ syntax error
awk: printError.awk:2: if (! (print("Hello") > "/this/doesnt/exist")) {
awk: printError.awk:2: ^ syntax error
awk: printError.awk:2: if (! (print("Hello") > "/this/doesnt/exist")) {
awk: printError.awk:2: ^ syntax error
编辑:
我找到了 gawk 4.2+ 的解决方案,但我工作的环境只有 4.0,所以我仍在寻找该版本的解决方案。
最佳答案
对于 gawk 4.2,答案在这里: https://www.gnu.org/software/gawk/manual/html_node/Nonfatal.html 。但似乎 PROCINFO["NONFATAL"] 在早期版本中不存在。
使用以下 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
关于function - awk - 测试打印是否成功,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53010506/