Мне нужно дедуплицировать большой список слов. Я попробовал несколько команд и провел некоторое исследование здесь и здесь, где они объясняют, что самый быстрый способ дедупликации списка слов, кажется, использует awk.
awk -> O (n)? сортировать -> 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
Таким образом, использование сортировки -u происходит в 3,7 раза быстрее. Почему это? Есть ли еще более быстрый способ дедупликации?
*********** Обновить ********
Как кто-то указал в комментариях, возможно, мой список слов уже был в некоторой степени отсортирован. Чтобы исключить эту возможность, я сгенерировал два списка слов, используя этот скрипт на python .
List1 = 7 Мб
List2 = 690 Мб
Результаты 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