2017-10-08 15 views
1

これは私のコードの仕組みです。改行文字がなくなったので、行の代わりに文字を数えるように指定されています。wc -c間違った文字数を計算するunix

オリジナルファイルは

A,0,0,0,21,36,12,0,0,0,17.2,34,18,17.2,30.5,96,126,517,2399,2,111.83,38.583,111,1,0,0,0,0,0,0 

csvファイルは、データの束を持っていると私はちょうど列の数をカウントしています。コンマの数と同じ数の列しかありません。私は改行文字を削除したので、wc -lを使うことができないので、同じ値を返したwc -cまたは-mを使用しようとしました。ただし、N + 1の値を数えました。

!head -1 ~/where/my/data/is/at.csv | sed 's/[^,]//g' | cat -E 

returns [',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,$'] 

ちょうどここにカンマをカウントすると、それは30ですが、私はwc -cを行うとき、それは31

を返しますそれは私のインスタンスのために30を与える必要がありますが、それは私の31を与えているので、それはn個です+1。私はそのような問題を解決する方法を、wcが正しいものを数えていないときにしたい。

+0

あなたがサンプルINPUT_FILEを投稿し、それが明確ではないとして、コードタグで期待される出力をサンプリングしてくださいでした。 – RavinderSingh13

+0

あなたのサンプルではうまくいますサンプルラインを投稿して(またはサンプルラインを作成して)出力として必要なものを教えてくれれば、30のカンマではなく29のカンマしか表示されません。ただ出力が表示されますか?例: 'printf ',,,,,,,,,,,,,,,,,,,,,,,,,,,' | wc -c'は29を与えます...他に何ができますか? – Sundeep

+0

私はawkがうまく動作すると思いますが、awkがここでコンマを数えているのと同じプロセスでwcがどのように動作するのか不思議です。 – Mayjunejuly

答えて

1

あなたは、列の数をカウントすることに興味があるので、あなたがこのためにAWKを使用することができます。あなたの入力を使用して

$ cat file 
A,0,0,0,21,36,12,0,0,0,17.2,34,18,17.2,30.5,96,126,517,2399,2,111.83,38.583,111,1,0,0,0,0,0,0 

ができます:

$ awk -F, '{print NF}' file 
30 

の場合コンマの数に興味があります:

$ head -1 file | awk -F, '{print NF-1}' 
29 

ところで、私はwc -mに電話をかけて文字を数えようとしていると思います。

+0

'cat -E'は各行の最後に' $ 'を表示します。あなたのCSVの抽出を表示して、より具体的な答えを出してください。 –

+0

awkを使用してコンマの数を調べることは理解できますが、awkが実際にN値を与えるのは非常にうまくいくのに対して、wc -mはN + 1の値を与えているのはなぜか分かりません。 – Mayjunejuly

+0

'wc -m'が' 30'を返すので、あなたは何か異なることをしなければなりません。その間のどこかで 'cat -E'を使用していないと確信していますか? –

4

wc -cは、catの後に出力に追加された改行文字をカウントします。あなたは複数行にカンマを出力に含まれますgrep -oコマンドにパイプwc -lに試すことができます

head -1 ~/where/my/data/is/at.csv | grep -o ',' | wc -l 
関連する問題