6

単語が1行ずつあるファイルから単語の頻度を計算したいと思います。ファイルは非常に大きいので、これが問題になる可能性があります(この例では300k行をカウントします)。

私はこのコマンドを実行します:

cat .temp_occ | uniq -c | sort -k1,1nr -k2 > distribution.txt

問題は、それが私に小さなバグを与えることです:それは同じ単語を異なるものと見なします。

たとえば、最初のエントリは次のとおりです。

306 continua 
278 apertura 
211 eventi 
189 murah 
182 giochi 
167 giochi 

あなたがgiochi見ることができるように2回繰り返されます。

ファイルの下部ではさらに悪化し、次のようになります。

  1 win 
  1 win 
  1 win 
  1 win 
  1 win 
  1 win 
  1 win 
  1 win 
  1 win 
  1 winchester 
  1 wind 
  1 wind 

すべての言葉のために。

私は何が間違っているのですか?

4

4 に答える 4

13

最初に並べ替えてみてください:

cat .temp_occ | sort| uniq -c | sort -k1,1nr -k2 > distribution.txt
于 2012-08-08T08:24:34.087 に答える
6

または、重複を排除する「sort-u」を使用します。ここを参照してください。

于 2012-08-08T08:26:36.537 に答える
3

ファイルのサイズは、表示されているものとは関係ありません。uniq(1)のマニュアルページから

注:「uniq」は、隣接していない限り、繰り返される行を検出しません。最初に入力をソートするか、「uniq」なしで「sort-u」を使用することをお勧めします。また、比較は「LC_COLLATE」で指定されたルールを尊重します。

だから実行uniq

a
b
a

戻ります:

a
b
a
于 2015-05-13T13:30:27.663 に答える
1

一部の単語の後に空白文字が含まれている可能性はありますか?その場合は、次のようなものを使用してそれらを削除する必要があります。

cat .temp_occ | tr -d ' ' | uniq -c | sort -k1,1nr -k2 > distribution.txt
于 2012-08-08T08:26:20.367 に答える