Unixで、テキスト中にマッチする単語の「個数」を数えたいです。

Perlとかで書けば出来ますが、grepとかwcとかをうまく使えば、コマンドだけで簡単に出来そうな気がするのに、思いつきません。
簡単に出来る方法を教えてください。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答5件)

id:Kumappus No.1

回答回数3784ベストアンサー獲得回数185

ポイント5pt

grep -c ”対象の単語” テキストファイル名

では?

id:stealthinu

-c だと、行数なので、同一行に複数の対象単語があった場合、合わなくなってしまいませんか?

実は自分もそれでいけると思って、さっくりと期待を裏切られました。

あと、grepがSolarisの標準grepなので、GNU grepと違うのですが、たぶん同じ動作だと思います。

念のため確認してみます。

2005/12/21 15:36:31
id:cubick No.2

回答回数129ベストアンサー獲得回数39

ポイント5pt

wcコマンドの”-w(--words)”オプションでは駄目ですか?

id:stealthinu

wc -w コマンドは、そのテキスト中に含まれる単語数をカウントでは。

テキスト中に含まれるとある単語「foo」の数を数えたいのですが。

すんごい単純なことなにに、簡単な方法が思いつかない…

2005/12/21 15:52:42
id:dev_zer0 No.3

回答回数332ベストアンサー獲得回数25

ポイント40pt

http://www.hatena.ne.jp/1135146114

人力検索はてな - Unixで、テキスト中にマッチする単語の「個数」を数えたいです。 Perlとかで書けば出来ますが、grepとかwcとかをうまく使えば、コマンドだけで簡単に出来そうな気がするの..

URLはダミーです


perl -pe ’s/foo/foo¥n/g’ file | grep foo | wc -l


# perl使ってるじゃん...でもsedを無理に使いたくないなぁ...

id:stealthinu

うーん、やっぱりperl使わないと無理ですかね。

普通にある要望だと思うので、てっきりそのものが出来るコマンドとオプションの組み合わせがあるのかな、と思ってたのですが。

2005/12/21 17:40:01
id:cubick No.4

回答回数129ベストアンサー獲得回数39

ポイント15pt

http://www.perl.com/

Perl.com: The Source for Perl -- perl development, conferences

URLはダミーです。


失礼しました。単語の区切りを空白文字とするなら、次の様な感じでどうでしょうか?コマンドラインから実行します。


 perl -an -e ’$total+= grep(/<調べたい単語>/,@F);END{print ”$total¥n”;}’ <単語の含まれるファイル名>


例えば”apple”という単語が”fruits.txt”というテキスト中にいくつ出てくるかを調べるなら


 perl -an -e ’$total+= grep(/apple/,@F);END{print ”$total¥n”;}’ fruits.txt


といった具合になります。

id:stealthinu

今回の場合空白区切りなのでこれでいけますが、やはりperl使わないと無理なんですね。

もう一つ二つ見て、コマンドだけで簡単にいかないようなら、このへんであきらめたいと思います。

2005/12/21 17:44:41
id:JULY No.5

回答回数966ベストアンサー獲得回数247

ポイント15pt

URL は半分ダミーです。


下記のようなのはどうでしょう?


sed ’s/[ ¥t]/¥n/g’ ファイル名 | grep 単語 | wc -l


sed で単語を全て1行ずつにして grep をかけて wc で数える、という方法です。

英語のように、単語が空白文字で区切られている、という条件がつきますが...。

id:stealthinu

うーん、なるほど。

空白で区切れてる必要があるので汎用的ではないですが、いけますね。

しかしperlで数えちゃったほうが素直な気もしてきました…

2005/12/26 10:00:21

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません