Un de mes énormes fichiers texte (jusqu’à 2 Gio) contient environ 100 doublons exacts de chaque ligne qu’il contient (inutile dans mon cas, car le fichier est une table de données de type CSV).
Ce dont j'ai besoin, c’est d’éliminer toutes les répétitions (de préférence, mais cela peut être sacrifié pour une amélioration significative des performances) en maintenant l’ordre de séquence original. Dans le résultat, chaque ligne doit être unique. S'il y a 100 lignes égales (généralement, les doublons sont répartis dans le fichier et ne seront pas voisins), il ne restera plus qu'une seule de ces lignes.
J'ai écrit un programme en Scala (considérez-le en Java si vous ne connaissez pas Scala) pour l'implémenter. Mais peut-être existe-t-il des outils natifs C-écrits plus rapides capables de le faire plus rapidement?
MISE À JOUR: la awk '!seen[$0]++' filename
solution semblait bien fonctionner pour moi tant que les fichiers étaient proches de 2 Gio ou moins, mais maintenant que je vais nettoyer un fichier de 8 Gio, cela ne fonctionne plus. Cela semble prendre une infinité sur un Mac avec 4 Go de RAM et un PC Windows 7 64 bits avec 4 Go de RAM et 6 Go échangés, la mémoire manque. Et je ne suis pas enthousiaste à l'idée d'essayer Linux avec 4 Go de RAM, compte tenu de cette expérience.
sort -u
sera probablement plus rapide.