美文网首页
awk判断文件是否存在

awk判断文件是否存在

作者: CodingCode | 来源:发表于2023-02-22 11:38 被阅读0次

    首先大量介绍的是:

    if (system ("test -r " $1) != 0) {
       ...
    }
    

    这个方法最简洁明了,但是有一个问题是当在一个awk脚本里面要检查文件很多,比如几千个,那么性能就是一个很大的问题。

    网上google了一下,有介绍用@load "filefuncs"的,听起来很方便很好用,但是我捣鼓了半天也没有成功,放弃了。

    最后找到一个折中办法,性能反正凑合用:

    function file_exist(filename, sz) {
       command="stat -c%s "filename" 2>/dev/null";
       command | getline sz;
       close(command);
       return length(sz)
    }
    
    BEGIN{
        if (file_exist("a-existed-file")) {
          print "Yes";
        } else {
          print "No";
        }
    
        if (file_exist("a-non-existed-file")) {
          print "Yes";
        } else {
          print "No";
        }
    
        if (file_exist("a-empty-existed-file")) {
          print "Yes";
        } else {
          print "No";
        }
    }
    

    运行结果是:

    $ awk -f test.awk
    Yes
    No
    Yes
    

    来补充一下@load "filefuncs"失败的原因:可能是之前的gawk版本过低,导致各种错误,自从升级到4.2.1之后就成功了,脚本例子如下:

    @load "filefuncs"
    BEGIN {
       if (stat("filename", _st) >= 0) {
          printf "Error: file(%s) exists\n", <filename>
       } else {
          printf "Error: file(%s) does not exist\n", <filename>
       }
    }
    

    这个版本和脚本在Linux和Windows下均测试过。

    相关文章

      网友评论

          本文标题:awk判断文件是否存在

          本文链接:https://www.haomeiwen.com/subject/xtrakdtx.html