Ich muss eine große Wortliste deduplizieren. Ich habe mehrere Befehle ausprobiert und hier und hier Nachforschungen angestellt , in denen erklärt wurde, dass der schnellste Weg zum Deduplizieren einer Wortliste awk zu verwenden scheint.
awk -> O (n)? sortieren -> O (n log n)?
Ich fand jedoch, dass dies nicht wahr zu sein scheint. Hier sind meine Testergebnisse:
sort -u input.txt -o output.txt
echte 0m12.446s
Benutzer 0m11.347s
sys 0m0.906s
awk '!x[$0]++' input.txt > output.txt
echte 0m47.221s
Benutzer 0m45.419s
sys 0m1.260s
Die Verwendung von sort -u ist also 3,7-mal schneller. Warum ist das? Gibt es eine noch schnellere Methode zur Deduplizierung?
*********** Update ********
Wie jemand in den Kommentaren hervorhob, könnte es sein, dass meine Wortliste bereits zu einem gewissen Grad sortiert war. Um diese Möglichkeit auszuschließen, habe ich mit diesem Python-Skript zwei Wortlisten erstellt .
Liste1 = 7 MB
Liste2 = 690 MB
Ergebnisse AWK:
List1
real 0m1.643s
Benutzer 0m1.565s
sys 0m0.062s
List2
real 2m6.918s
Benutzer 2m4.499s
sys 0m1.345s
Ergebnisse SORT:
List1
real 0m0.724s
user 0m0.666s
sys 0m0.048s
List2
real 1m27.254s
user 1m25.013s
sys 0m1.251s