Perl / Shellで区切り文字ベースの行を削除する方法は?

Perl / Shellで区切り文字ベースの行を削除する方法は?

誰でも区切り記号(カンマ)に基づいてファイルの行を削除するのに役立ちますか?行に列数が少ないか、誤ったレコードが含まれている場合は削除する必要があります。

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

以下のコマンドは、1行の区切り記号の数を提供します。 4と同じでない場合はどうすれば削除できますか?

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

ありがとうございます。

答え1

別のPerl:3つのカンマがある場合は、1行を印刷します。

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なしで実行できます。-a-n-F-a-a-n

または、次のものを使用できますsed

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

答え3

awkを使用できます。

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

バージョン> = 4.1.0が利用可能な場合は、次のものをgawk使用できます。inplace情報。したがって、次のようになります。

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

答え4

GNU sedの使用:

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

関連情報