web-dev-qa-db-ja.com

ファイル内の単語を並べ替える

克服できない問題がいくつかあります。最初に、テキストファイルのN語を数える必要があります。次に、それらを降順で印刷し、次に出現回数を印刷する必要があります。単語はアルファベット順に並べ替える必要があります。

例として、単語が6回出現する場合 "a"、単語が5回"b"、単語が5回c、nが2として与えられ、私は印刷します:

a 6

b 5

単語「la」が10回、単語「hi」が5回、「zzz」が5回、「arr」が5回出現し、nが3の場合、次のように出力します。

la 1

arr 5

こんにちは5

(zzzは意図的に省略されています)。

問題は、私のスクリプト(以下にあります)が出現回数ごとに1つの単語しか出力しないことです。

tr  [:space:] '\n' <$1| uniq -c|sort -rnuk1,1|awk '{print $2,$1}'|head -n

追加機能として、ファイルの最初のm行にある単語の出現回数をスクリプトで検索したいと思います。

1
gigiman

trの使用は賢いです。ただし、sortは隣接する行のみを参照するため、uniqを使用する前にuniqを実行する必要があります。だから私たちは持っています

cat file.txt | sort | uniq -c | sort -r | awk '{print $2, $1}' | head -n 10

また、ご覧のとおり、この場合、ソートに-k-nを使用する必要はありません(間違いではありませんが)。

1
gardenhead

最初の質問への答えは(誰かが興味を持っているなら?)

tr  [:space:] '\n' <$1| sort |uniq -c|sort -k1rn -k2n|awk '{print $2,$1}'|head -12

私はまだこの部分を行う方法がわかりません。

追加機能として、ファイルの最初のm行にある単語の出現回数をスクリプトで検索したいと思います。

2
gigiman