我有一个脚本,它从一个文件夹中获取多个 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
;在许多系统中无论如何都连接到标准错误,因此结果是相同的。)