2011-10-12 4 views
3

解決するのは簡単な問題です。ファイル内の各行の区切り文字の数をカウントします。私はどのように多くのコンマ各行にカウントするシェルスクリプト:読み込み中にこのようなファイルやディレクトリがありません

4489201,6421,,, 
4619802,4276 

は、ここに私のサンプルファイルです。私はあなたの助けを本当に感謝

sed: can't read 4489201,6421,,,,,,,,,: No such file or directory 
0 
sed: can't read 4619802,4276,,,,,,,,,: No such file or directory 
0 

:私は、エラーメッセージがある

#!/bin/bash 
data_file="$1" 

while read line 
do 
    delimiter_cnt=`sed 's/[^,]//g' $line | wc -c` 

echo "delimiter_cnt" 
done < $data_file 

この間は、行のスクリプトを読んで書きましたが、エラー「そのようなファイルやディレクトリを」得続けます。前もって感謝します。

+0

は、あなたが避けることができます' '<<<'演算子を使用してグレッグHewgillの答えにecho': 'sedのさん/ [^、] // g '<<< "$ line" | wc -c'を実行するだけで、出力をキャプチャしてエコーする必要はありません。 –

答えて

4

sedにその名前のファイルを読むように求めています。

delimiter_cnt=`echo $line | sed 's/[^,]//g' | wc -c` 
+0

これは美しく機能します。私は本当にあなたの迅速な対応に感謝します。 – dave

+0

うれしい私は助けることができます。答えの左側にあるチェックボックスをクリックすることで、最も役立った回答を「受け入れる」ことを忘れないでください(これは、他の人があなたの質問に対して最良の答えを明確に示すのに役立ちます)。スタックオーバーフローへようこそ! –

2

利用のawk:sedの標準入力にご入力を送信してみてください-F,ことで

awk -F, '{print NF-1}' < input_file 

あなたは、awkの言うフィールドセパレータとして,を使用するようにして、各ラインの印刷NF-1値について。 NFは、現レコードのawkのフィールド数です。

1

Michał Šrajer's awk answerが好きです。もしbashを使用する場合は、右のシェルでそれを行うことができます: `bash`で

while read line; do 
    commas=${line//[^,]/} 
    echo ${#commas} 
done < filename 
+0

ニース。これらのコード行も同様に機能しました。ありがとう – dave

関連する問題