apple
orange
apple
apple
orange
:
:
という改行区切りに単語が並んでいるリストがテキストに保存されています。
これらの単語は予測できないものとします。
このリストから
apple 5
lemon 4
orange 2
というように、出現した単語をすべてリストアップし、個数を数え、多い順に並べ替え、表示または保存する、というようなことをしたいです。
SQL で言うならば
SELECT 単語,count(*) FROM 単語リスト GROUP BY 単語 ORDER BY count(*) DESC
と同じことを、シェルスクリプトだけで行いたいのです。
環境は RHEL または CentOS の 5.x 系で、 Web用途ではないマシンのため、各種CGIやデータベースは入れてません。
何か良いアイデアはないでしょうか。
cat FILE | sort | uniq -c | sort -nr | awk '{print $2,$1}'
で FILE に入っている単語を表示できます。
出力をファイルにリダイレクトすればファイルにも保存可能です。
cat FILE | sort | uniq -c | sort -nr | awk '{print $2,$1}'
で FILE に入っている単語を表示できます。
出力をファイルにリダイレクトすればファイルにも保存可能です。
すばやいご回答、ありがとうございます。
全てにおいて適した結果になっております。
個数が冒頭に表示されても良ければ、1行でできます。
ターゲットのテキストは "hoge.txt" に記されているとします。
sort hoge.txt | uniq -c | sort -r
最低限パイプ2つあれば良いというシンプルなご回答ですね。
理解しやすいです。ありがとうございます。
ありがとうございます。こちらも問題なく動きました。
ただ、 -k 2 が意味するところが良く分からないです。
$ cat hoge.txt | sort | uniq -c | sed 's/^ *\([0-9]*\) *\(.*\)$/\2 \1/'
ありがとうございます。 sed により表示もバッチリです。
ただ、要件の「多い順に並べ替え」ができませんでした。
すばやいご回答、ありがとうございます。
全てにおいて適した結果になっております。