awk + ​​计算 csv 中的字段分隔符并打印行号

awk + ​​计算 csv 中的字段分隔符并打印行号

我们有超过 50000 行的 csv 文件 这只是示例

Dcccrev,wefrwvfr,rfregt,wr4f,rfvrv,ecxwec,ecfrv,rfrf
Grge,gtgr,frfrv,gthtgv,gerg5tgvrt,rvrfvtg,tgt,frfrf,rfrf
Drfrfr,t,tgtg,rf,rgr,grtg,tgt,gtgtg,rg
.
.
.

我的任务是:如果每行中的分隔符“,”的数量不等于7,则需要打印行号

是否可以为这项任务创建一个 awk 行或一个 perl 行?

无需使用 echo 或 cat 花费时间

答案1

使用 awk 这相当容易。您可以将分隔符设置为 ,然后-F','用 NF 对列进行计数。对于 7 个逗号,我们需要 8 个字段并使用 NR 打印当前行号。

awk -F ',' 'NF != 8 {print NR}' test.txt

test.txt的内容

Dcccrev,wefrwvfr,rfregt,wr4f,rfvrv,ecxwec,ecfrv,rfrf
Grge,gtgr,frfrv,gthtgv,gerg5tgvrt,rvrfvtg,tgt,frfrf,rfrf
Drfrfr,t,tgtg,rf,rgr,grtg,tgt,gtgtg,rg

输出

2
3

答案2

Perl 的 s/// 运算符(也可以使用 tr/// 又名 y///)返回它执行的替换次数,可用于查找“,”的数量。类似地,m// 运算符返回匹配的数量。

perl -lne 's/,//g == 7 or print $.'      yourfile
perl -lne 'print $. if 7 != (() = /,/g)' yourfile
sed   -ne 's/[^,]//g; /^.\{7\}$/!='      yourfile

相关内容