AWK嵌入BASH脚本需求:验证NF≥10并分流行至标准输出与拒绝文件
修正AWK脚本实现目标需求
原脚本问题
你当前的脚本不管字段数是否达标,都会把所有行输出到标准输出,同时仅把字段数不足10的行追加到拒绝文件,这和你要的「仅字段数≥10的行输出到stdout,不足的行只写入拒绝文件」需求不符。
修正后的完整实现
执行命令
awk -v reject_file=MyRejectFile.csv "${AWK_SCRIPT}" MyFile.csv | <generic loader>
(去掉了多余的cat,直接让awk读取文件,减少不必要的进程开销)
修正后的AWK_SCRIPT
AWK_SCRIPT='BEGIN { FS="," OFS="," } { if (NF < 10) { print $0 > reject_file } else { print $0 } }'
关键调整说明
- 逻辑重构:仅当行的字段数
NF ≥ 10时,才将行输出到标准输出,供后续的<generic loader>处理;字段数不足10的行直接写入拒绝文件,不会流入后续流程。 - 文件写入优化:用
>替代>>,首次执行会创建新的拒绝文件,避免重复写入历史数据;如果需要多次执行时追加内容,改回>>即可。 - 精简流程:去掉无用的
cat管道,让awk直接读取目标文件,更符合Unix高效处理的风格。
测试结果验证
用你提供的MyFile.csv测试:
- 标准输出仅输出2行符合要求的内容:
This,is,a,sample,line,that,has,more,than,10,fields This,is,a,second,line,that,has,more,than,10,fields
MyRejectFile.csv会写入2行字段数不足的内容:
This,line,has,less,than,10,fields This,line,also,has,less,than,10,fields
内容的提问来源于stack exchange,提问作者James P
相关产品推荐
相关产品推荐

