追記: sort を使うときは,LC_ALL=C を忘れずに
> wc --lines unigram_raw.txt 290768333 unigram_raw.txt
そもそも,たかだか3億要素,1.7Gのデータのソートに,最近のマシンで
sort | uniq -c
が858分もかかるのは変ですよね.
> export LC_ALL=C > time sort -S 2G unigram_raw.txt | uniq -c > tmp.sort.uniq sort -S 2G unigram_raw.txt 389.93s user 16.32s system 99% cpu 6:49.61 total uniq -c > tmp.sort.uniq 15.40s user 1.56s system 4% cpu 6:49.62 total
Intel Xeon E5462 (3.2Ghz) が Dual Core AMD Opteron 1210 より 100倍以上速い,わけはなく,LC_ALL環境変数とsortコマンド - sileのブログにある通り,LC_ALL を C にせずに実行している可能性が高そう(手元で LC_ALL=C しないで sort すると,文字列の比較に失敗して落ちるので違うかも知れないけど).誰も変だと思わないのはちょっと危険なのでエントリで取り上げてみる.
export LC_ALL=C
と打つだけで >100 倍ですよ(流石にこれは言い過ぎか).LC_ALL がシェル全体で有効になるのが嫌なら,
> time LC_ALL=C sort -S 2G unigram_raw.txt | LC_ALL=C uniq -c > tmp.sort.uniq.utf8 LC_ALL=C sort -S 2G unigram_raw.txt 376.42s user 15.87s system 98% cpu 6:39.86 total LC_ALL=C uniq -c > tmp.sort.uniq.utf8 15.40s user 1.43s system 4% cpu 6:39.86 total
でも ok.