如何输出CSV文件中字段数量不正确的行号,附awk实现示例
需求说明
我有一个CSV文件,第一行是表头,字段数量为正确标准值,需要输出所有字段数量不符合该标准的行的编号。
原有代码问题
你编写的原有代码存在两处冗余逻辑,会输出多余内容:
- 开头的
{c;是无意义的空语句,没有实际作用 - 多余的
print c语句会把标准字段数重复输出,混杂在结果中干扰判断
修正后可用代码
如果你的CSV是制表符分隔的,可直接使用以下代码:
awk 'BEGIN { RS="\n"; FS="\t" } NR==1 { standard=NF } NR>1 && NF!=standard { print NR }' ./cities.csv
如果是普通逗号分隔的CSV,修改字段分隔符参数即可:
awk 'BEGIN { RS="\n"; FS="," } NR==1 { standard=NF } NR>1 && NF!=standard { print NR }' ./cities.csv
逻辑说明
- BEGIN块提前指定行分隔符为换行符,字段分隔符根据你的CSV实际分隔规则设置
- 读取第一行(行号NR=1)时,将该行的字段数NF赋值给
standard作为校验的标准值 - 从第二行开始逐行校验,只要当前行的字段数不等于标准值,就直接输出该行的行号
内容的提问来源于stack exchange,提问作者ktoś tam
相关产品推荐
相关产品推荐

