awk可以跳过不存在的文件,无种族?

6 error-handling awk gawk race-condition

有没有办法让awk(gawk)忽略或跳过丢失的文件?也就是说,在命令行上传递的文件不再存在于文件系统中(例如,在/ proc/[1-9]*下快速出现/消失文件).

默认情况下,丢失的文件是致命错误:-(

我希望能够做到这样的事情:

BEGIN { MISSING_FILES_ARE_FATAL = 0 }  # <- Wishful thinking!
      { count++ }
END   { print count }
Run Code Online (Sandbox Code Playgroud)

包装器脚本无法检查awk运行时是否存在文件,因为它们在检查和awk之间可能会消失,然后尝试打开它们,即它是竞争条件.(这也是在awk中检查然后打开的竞争条件,虽然时间更紧)

Sch*_*ern 1

按照最好的传统,我将用 Perl 程序回答您的 awk 问题。

#!/usr/bin/perl -w

for my $file (@ARGV) {
    open my $fh, $file or next;
    while(<$fh>) {
        ...do your thing here...
    }
}
Run Code Online (Sandbox Code Playgroud)

(它不是 awk,但它是唯一没有竞争条件的解决方案。)