J'ai besoin de dédupliquer une grande liste de mots. J'ai essayé plusieurs commandes et fait des recherches ici et ici où elles expliquent que le moyen le plus rapide de dédupliquer une liste de mots semble utiliser awk.
awk -> O (n)? trier -> O (n log n)?
Cependant, j'ai trouvé que cela ne semble pas être vrai. Voici mes résultats de test:
sort -u input.txt -o output.txt
réel 0m12.446s
utilisateur 0m11.347s
sys 0m0.906s
awk '!x[$0]++' input.txt > output.txt
réel 0m47.221s
utilisateur 0m45.419s
sys 0m1.260s
L'utilisation de sort -u est donc 3,7 fois plus rapide. Pourquoi est-ce? existe-t-il une méthode encore plus rapide pour effectuer la déduplication?
*********** Mise à jour ********
Comme quelqu'un l'a souligné dans les commentaires, il se pourrait que ma liste de mots ait déjà été triée dans une certaine mesure. Pour exclure cette possibilité, j'ai généré deux listes de mots en utilisant ce script python .
Liste1 = 7 Mo
Liste2 = 690 Mo
Résultats AWK:
Liste1
réels 0m1.643s
utilisateur 0m1.565s
les 0m0.062s de
List2
réels 2m6.918s
2m4.499s utilisateur
de 0m1.345s de
Trier par :
Liste1
réels 0m0.724s
utilisateur 0m0.666s
0m0.048s sys
List2
réels 1m27.254s
1m25.013s utilisateur
de 0m1.251s de