Necesito deduplicar una gran lista de palabras. Probé varios comandos e hice algunas investigaciones aquí y aquí donde explican que la forma más rápida de deduplicar una lista de palabras parece estar usando awk.
awk -> O (n)? ordenar -> O (n log n)?
Sin embargo, descubrí que esto no parece ser cierto. Aquí están mis resultados de prueba:
sort -u input.txt -o output.txt
usuario real 0m12.446s 0m11.347s
sys 0m0.906s
awk '!x[$0]++' input.txt > output.txt
usuario real 0m47.221s 0m45.419s
sys 0m1.260s
Entonces usar sort -u es 3.7 veces más rápido. ¿Por qué es esto? ¿Existe un método aún más rápido para hacer deduplicación?
*********** Actualizar ********
Como alguien señaló en los comentarios, podría ser que mi lista de palabras ya estuviera ordenada hasta cierto punto. Para excluir esta posibilidad, generé dos listas de palabras usando este script de Python .
Lista1 = 7 Mb
Lista2 = 690 Mb
Resultados AWK:
List1
real 0m1.643s
usuario 0m1.565s
sys 0m0.062s
List2
usuario
real 2m6.918s
2m4.499s
sys 0m1.345s
Resultados Ordenar:
Lista1
reales 0m0.724s
0m0.666s usuario
sys 0m0.048s
List2
real 1m27.254s
usuario 1m25.013s
sys 0m1.251s