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