awk csv 处理输出格式错误的行到 stderr

awk csv 处理输出格式错误的行到 stderr

我有一个脚本,它从一个文件夹中获取多个 CSV 文件,并将它们放在一个 gzip 文件中,并从文件名中提取一个字段:

awk -F";" 'BEGIN { OFS = FS }
FNR == 1 { match(FILENAME, "([0-9]{8})", a); JOBID = a[1]; print $0, JOBID }
FNR > 1 { print $0, JOBID }' Event_*txt | gzip > agzipfile.gz

我的目标是NF检查该行是否包含 5 个字段,如果不包含,则将此行打印到 stderr 或另一个文件。
但我不明白或找到正确的方法来做到这一点。
这可能吗?如何实现?
PS:我使用的是GNUawk

答案1

您可以在 AWK 内重定向:

NF != 5 { print > "/dev/stderr"; next }

/dev/stderr是 GNU AWK 内部处理的特殊文件名之一。 (如果可能的话,其他 AWK 实现将写入/dev/stderr;在许多系统中无论如何都连接到标准错误,因此结果是相同的。)

手册中关于重定向的这一部分, 和这个是关于特殊文件描述符的

相关内容