2017-04-09 11 views
0

ここにテストサンプルファイル-rime.txtがあります。grepまたはsedでファイル内の単語を数えるには?

rime.txt

1.toは、ファイル内のすべての単語を数えます。

wc -w rime.txt 
4081 rime.txt 
awk 'BEGIN{num=0}{split($0, A);n=length(A);num=num+n;}END{print num}' rime.txt 
4081 

grep -Ec '\w' rime.txt 
672 

なぜgrepで総単語数は672ですか?
sedで数える方法は?行あたりの

2.toカウント言葉のsedでそれを行う方法

awk '{split($0, A);print length(A)}' rime.txt 

+1

sedと算術演算は混在しません... wcマニュアルページの通り、 'wordは空白で区切られた文字の長さがゼロでないシーケンスです.' ...等価で' grep -io '[ ^] * 'ip.txt'と行数をカウントするには – Sundeep

+0

grep -io' [^] * 'rime.txt | wc -l –

+1

これで、wcなどを使って行を数えますが、 'wc -wはそこにありますか? – Sundeep

答えて

3

grepは単語ではなくcountig行であり、sedは個々の行の単純な置換であるため、sedを使用することはありません。

また、それらのawkスクリプトはばかげています。最初のものを書く正しい方法はawk '{num+=NF} END{print num+0}'、またはGNU awk awk -v RS='[[:space:]]+' 'END{print NR+0}'で、2番目はちょうどawk '{print NF}'です。

+0

@Sundeep corrected thx。 –

+0

なぜnum + 0とNR + 0? –

+0

入力ファイルが空であっても数値出力が得られます。 '+ 0'の有無にかかわらず/ dev/null上でスクリプトを実行してみてください。 –

1

行ではなく、とカウントされているためです。マニュアルページから:

-c、--count 通常の出力を抑制します。各入力ファイルに対して一致する行の数を出力してください。 -v、--invert-matchオプション(下記の を参照)を使用して、一致しない行を数えます。

そして、あなたがlink you provided上で見ることができるように、834行と672 SLOC(Source lines of code)、およびその最後の測定があるが1つのgrepが使用されます。

0

ジョブにgrepを使用する場合は、最初に単語に似せる正規表現を作成してください。私はちょうど[a-zA-Z'-]を使用して、より良い結果を出しましょう。

-o, --only-matching 
      Print only the matched (non-empty) parts of a matching line, 
      with each such part on a separate output line. 

そして最後にwc -lとのマッチを数える:次にマッチングにgrep -oを使用

$ grep -o [a-zA-Z'-] rime.txt | wc -l 
4090 
+1

あなたの答えで 'count'に' grep'を使うつもりであることを確信しています:) – Inian

+0

@Inian彼は 'grep'の使い方を尋ねましたが、明らかにそれを数えることはできませんが、それの。そして再び、grepを使って投票を減らしました。 :D –

1

行方不明の言葉であなたの疑問を明確にするために、ここで一つの小さな例を取る -

明らかに
$cat ff 
hello vipin 
kumar 
good night 

、 5行3行。

トイレ-w初段

$wc -w ff 
5 ff 

、あなたが使用しているgrepコマンドを試す -

$grep -Ec '\w' ff 
3 

をお使いの場合の総行数では -

$wc -l < file.txt 
833 

合計空白行数 -

$grep '^$' file.txt |wc -l 
161 

総非空白行数 - あなたは672行を見ている理由です

$grep -v '^$' file.txt |wc -l 
672 

。専門家として

$echo $(expr 833 - 161) 
672 

はすでに、あなたの行数ではなく、ワードカウントを与えるだろう、この操作とgrep \ Wのsedを使うべきではないと述べました。

関連する問題