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/

10-13 05:24