Eu preciso deduplicar uma lista de palavras grande. Tentei vários comandos e fiz algumas pesquisas aqui e aqui, onde explicam que a maneira mais rápida de desduplicar uma lista de palavras parece estar usando o awk.
awk -> O (n)? ordenar -> O (n log n)?
No entanto, descobri que isso parece não ser verdade. Aqui estão meus resultados de teste:
sort -u input.txt -o output.txt
usuário 0m12.446s real 0m11.347s
sys 0m0.906s
awk '!x[$0]++' input.txt > output.txt
usuário 0m47.221s real 0m45.419s
sys 0m1.260s
Portanto, usar sort -u é 3,7 vezes mais rápido. Por que é isso? existe um método ainda mais rápido para desduplicar?
*********** Atualização ********
Como alguém apontou nos comentários, pode ser que minha lista de palavras já tenha sido classificada até certo ponto. Para excluir essa possibilidade, gerei duas listas de palavras usando esse script python .
Lista1 = 7 Mb
Lista2 = 690 Mb
Resultados awk:
Lista1
reais 0m1.643s
usuário 0m1.565s
sys 0m0.062s
List2
real 2m6.918s
usuário 2m4.499s
sys 0m1.345s
ORDEM de resultados:
List1
real 0m0.724s
usuário 0m0.666s
sys 0m0.048s
List2
real 1m27.254s
usuário 1m25.013s
sys 0m1.251s