Muszę deduplikować dużą listę słów. Wypróbowałem kilka poleceń i przeprowadziłem badania tutaj i tutaj, w których wyjaśniają, że najszybszym sposobem na zduplikowanie listy słów wydaje się być użycie awk.
awk -> O (n)? sort -> O (n log n)?
Stwierdziłem jednak, że to nieprawda. Oto moje wyniki testów:
sort -u input.txt -o output.txt
rzeczywisty 0m12.446s
użytkownik 0m11.347s
sys 0m0.906s
awk '!x[$0]++' input.txt > output.txt
rzeczywisty 0m47.221s
użytkownik 0m45.419s
sys 0m1.260s
Zatem użycie sort -u jest 3,7 razy szybsze. Dlaczego to? czy istnieje jeszcze szybsza metoda przeprowadzenia deduplikacji?
*********** Aktualizacja ********
Jak ktoś zauważył w komentarzach, być może moja lista słów była już do pewnego stopnia posortowana. Aby wykluczyć tę możliwość, wygenerowałem dwie listy słów za pomocą tego skryptu python .
List1 = 7 Mb
List2 = 690 Mb
Wyniki AWK:
List1
rzeczywisty 0m1.643s
użytkownik 0m1.565s
sys 0m0.062s
List2
real 2m6.918s
użytkownik 2m4.499s
sys 0m1.345s
Sort:
listy1
prawdziwych 0m0.724s
0m0.666s użytkownik
SYS 0m0.048s
List2
real 1m27.254s
użytkownik 1m25.013s
sys 0m1.251s