web-dev-qa-db-ja.com

テキストファイル内のWordの出現回数を数える

ツイートを含むテキストファイルがあり、ツイートで単語が言及された回数を数える必要があります。たとえば、ファイルには次のものが含まれます。

Apple iPhone X is going to worth a fortune
The iPhone X is Apple's latest flagship iPhone. How will it pit against it's competitors?

ファイルでWord iPhoneが何回言及されているかを数えたいとしましょう。これが私が試したものです。

cut -f 1 Tweet_Data | grep -i "iPhone" | wc -l

それは確かに動作しますが、UNIXの「wc」コマンドについて混乱しています。私が次のようなことを試した場合の違いは何ですか:

cut -f 1 Tweet_Data | grep -c "iPhone"

代わりに-cが使用されていますか?これらは両方ともツイートがいっぱいの大きなファイルで異なる結果を生み、私はそれがどのように機能するのか混乱しています。発生をカウントする正しい方法はどれですか?

34
Maxxx

このような要件がある場合、GNU grep( -oオプション の場合)、を使用しますwcに渡して、発生の総数をカウントします。

$ grep -o -i iphone Tweet_Data | wc -l
3

データの単純なgrep -cは、一致するの総数ではなく、一致するの数をカウントします。 -oオプションを使用すると、grepは、一致が行に何回出現しても、その一致をオンラインで出力するように指示します。

wc -lは、wcユーティリティに行数をカウントするように指示します。 grepが各一致を独自の行に配置した後、これは入力内のWordの出現回数の合計です。


GNU grepが利用できない(または必要な)場合は、trを使用して入力を変換し、各Wordが独自の行にあるようにし、grep -cを使用してカウント:

$ tr '[:space:]' '[\n*]' < Tweet_Data | grep -i -c iphone
3
58
Jeff Schaller

最も簡単な方法は、

grep -wc "your_text" FileName

あなたのために、

grep -wc "iPhone" Tweet_Data
2