如何在 perl / Shell 中删除基于 Delimeter 的行?

如何在 perl / Shell 中删除基于 Delimeter 的行?

任何人都可以帮助删除基于分隔符(逗号)的文件中的行,如果行包含较少的列数或错误记录,则需要删除它们。

Input File:

a,b,c,d
a,b,d,f
c,d
a,v,b,h
d,e,v,n

在上面的文件中,如果分隔符小于 4,我必须从文件中删除该行。

Output File :

a,b,c,d
a,b,d,f
a,v,b,h
d,e,v,n

下面的命令给出了一行中的分隔符数量,如果不等于 4,我该如何删除,

egrep -iv '"' file.csv | awk -F',' '{print NF}' 

谢谢。

答案1

另一个 perl:如果有 3 个逗号则打印一行。

perl -i.bak -ne 'print if tr/,/,/==3' file

tr运算符返回音译的字符数。

答案2

perl

$ perl -F, -i.bak -ane 'print if @F > 3' file

对于perl> 5.20,您可以-F不使用-aand -n-F暗示-a-a暗示-n)。

或者你可以使用sed

$ sed -i.bak -e '/\([^,]*,\)\{3,\}/!d' file

答案3

您可以使用 awk:

awk -F',' 'NF==4' file

如果您可以使用gawk版本 >= 4.1.0 您可以使用inplace, more信息。所以它可能是:

gawk -i inplace -v INPLACE_SUFFIX=.bak -F',' 'NF==4' file

答案4

使用 GNU sed:

sed -nE '/^.+,.+,.+,.+$/p' file > output_file

相关内容