大きなワードリストを重複排除する必要があります。いくつかのコマンドを試して、こことここでいくつかの研究を行いました。そこでは、単語リストを重複排除する最も速い方法はawkを使用しているように見えることを説明しています。
awk-> O(n)?sort-> O(n log n)?
しかし、これは真実ではないようだ。私のテスト結果は次のとおりです。
sort -u input.txt -o output.txt
実数0m12.446s
ユーザー0m11.347s
sys 0m0.906s
awk '!x[$0]++' input.txt > output.txt
実数0m47.221s
ユーザー0m45.419s
sys 0m1.260s
したがって、sort -uを使用すると3.7倍高速になります。どうしてこれなの?重複排除を行うためのさらに速い方法はありますか?
***********アップデート********
誰かがコメントで指摘したように、私の単語リストはすでにある程度ソートされている可能性があります。この可能性を排除するために、このPythonスクリプトを使用して 2つのワードリストを生成しました。
List1 = 7 Mb
List2 = 690 Mb
結果AWK:
List1を
リアル0m1.643s
ユーザー0m1.565s
sysの0m0.062s
List2
実2m6.918s
ユーザー2m4.499s
sys 0m1.345s
結果SORT:
List1
real 0m0.724s
user 0m0.666s
sys 0m0.048s
List2
real 1m27.254s
user 1m25.013s
sys 0m1.251s