2017-10-20 12 views
0

の現在の行を削除:私は簡単に見える何かが直面しているんだけど、答えを見つけることができないファイル

この機能の目的は3つのカンマが含まれているすべての行を削除することです「」:

while read line; do                          
     COUNT=$(echo $line | grep -o "\," | wc -) 
     if [ $COUNT -ne 3 ]; then 
       remove line 
     fi 
done < tmp.txt 

現在の行を削除する方法はありません。どうすればよいですか?

tmp.txtの代わりに変数に入れた場合、このtmp.txtを大きな値からgrepで抽出しますか?同じですか?私は他の方法でそれをやっているだろう事前

答えて

0

while read line; do 
COUNT=$(echo $line | grep -o "\," | wc -) 
     COUNT=$(echo $line | grep -o "\," | wc -) 
     if [ $COUNT -ne 3 ]; then 
       remove line 
     fi 
done <<< "$toto" 

ありがとう:行がマッチする

while read line; do                          
     COUNT=$(echo $line | grep -o "\," | wc -) 
     if [ $COUNT -eq 3 ]; then 
       echo $line >> $tempofile 
     fi 
done < tmp.txt 

場合は、そうでない場合は次の行に取得し、それを維持します。

3

sedコマンドのみのソリューションを使用します。

sed '/^\([^,]*,\)\{3\}[^,]*$/d' infile 
  • 文字コンマ,は正確に3回発生し、これらすべての行を削除します。

またはawkを使用して:

awk -F, 'NF!=4' infile 

または両方が変数から読み取ります。

sed '/^\([^,]*,\)\{3\}[^,]*$/d' <<<"$variable" 
awk -F, 'NF!=4' <<<"$variable" 
-1

この単純なコマンドは、単純なawkのソリューション

awk 'gsub(/,/,",")!=3' file 

gsubは、指定した文字列とパターンを置き換え、それ3

$ awk '!/3/' file_name

+1

ない '3'自体、文字コンマ '、'それが起こっています3timesライン。 –

2

が含まれているすべての行を削除することができます置換/置換の数を返します。

,,に置き換えます。gsubは、文字列に,の番号を返します。

例:中

入力ファイル

hello this line has 1 , 
This line, has, 3 , 
This line, has, 4 , commas , Thanks 

出力

$ awk 'gsub(/,/,",")!=3' file 
hello this line has 1 , 
This line, has, 4 , commas , Thanks 
関連する問題