![awk csv 处理输出格式错误的行到 stderr](https://linux22.com/image/143382/awk%20csv%20%E5%A4%84%E7%90%86%E8%BE%93%E5%87%BA%E6%A0%BC%E5%BC%8F%E9%94%99%E8%AF%AF%E7%9A%84%E8%A1%8C%E5%88%B0%20stderr.png)
我有一个脚本,它从一个文件夹中获取多个 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
;在许多系统中无论如何都连接到标准错误,因此结果是相同的。)