Ma question est similaire à cette question mais avec quelques contraintes différentes:
- J'ai une grande liste de
\n
mots délimitée - un mot par ligne. La taille des fichiers varie de 2 Go à 10 Go. - J'ai besoin de supprimer toutes les lignes en double.
- Le processus peut trier la liste au cours de la suppression des doublons, mais n'est pas requis.
- Il y a suffisamment d'espace sur la partition pour contenir la nouvelle liste de mots unique.
J'ai essayé ces deux méthodes mais elles échouent toutes les deux avec des erreurs de mémoire insuffisante.
sort -u wordlist.lst > wordlist_unique.lst
awk '!seen[$0]++' wordlist.lst > wordlist_unique.lst
awk: (FILENAME=wordlist.lst FNR=43601815) fatal: assoc_lookup: bucket-ahname_str: can't allocate 10 bytes of memory (Cannot allocate memory)
Quelles autres approches puis-je essayer?
linux
text-processing
uniq
grand loup
la source
la source
Réponses:
Essayez d'utiliser le tri avec l' option
-o
/--output=FILE
au lieu de rediriger la sortie. Vous pouvez également essayer de définir lebuffer-size
avec-S
/--buffer-size=SIZE
. Essayez également-s
/--stable
. Et lisez la page de manuel, elle offre toutes les informations que j'ai données.La commande complète que vous pouvez utiliser et qui pourrait fonctionner pour ce que vous faites:
Vous pouvez également lire l'URL suivante:
http://www.gnu.org/s/coreutils/manual/html_node/sort-invocation.html
Cela explique plus en détail le tri que la page de manuel.
la source
sort: write failed: /root/tmp/sortVxscLn: No space left on device
. Le problème est un peu ennuyeux en ce qu'il n'échoue pas tout de suite. Il semble que vous deviez attendre que la mémoire soit épuisée avant de se tromper.sort
pour utiliser un système de fichiers avec plus d'espace libre.