GNU/Linux >> Tutoriels Linux >  >> Linux

Comment supprimer les lignes en double dans un fichier texte ?

Un énorme fichier texte (jusqu'à 2 Go) contient environ 100 doublons exacts de chaque ligne qu'il contient (inutile dans mon cas, car le fichier est un tableau de données de type CSV).

Ce dont j'ai besoin, c'est de supprimer toutes les répétitions tout en maintenant (de préférence, mais cela peut être sacrifié pour une amélioration significative des performances) l'ordre de la séquence d'origine. Dans le résultat, chaque ligne doit être unique. S'il y avait 100 lignes égales (généralement les doublons sont répartis dans le fichier et ne seront pas voisins), il ne doit en rester qu'une seule du même type.

J'ai écrit un programme en Scala (considérez-le comme Java si vous ne connaissez pas Scala) pour l'implémenter. Mais peut-être existe-t-il des outils natifs écrits en C plus rapides capables de le faire plus rapidement ?

MISE À JOUR :le nom de fichier awk '!seen[$0]++' filename La solution semblait fonctionner très bien pour moi tant que les fichiers étaient proches de 2 Go ou moins, mais maintenant que je dois nettoyer un fichier de 8 Go, cela ne fonctionne plus. Il semble prendre l'infini sur un Mac avec 4 Go de RAM et un PC Windows 7 64 bits avec 4 Go de RAM et 6 Go d'échange à court de mémoire. Et je ne me sens pas enthousiaste à l'idée de l'essayer sur Linux avec 4 Go de RAM compte tenu de cette expérience.

Réponse acceptée :

Un awk solution vue sur #bash (Freenode):

awk '!seen[$0]++' filename

Linux
  1. 7 Exemples de commandes Linux Uniq pour supprimer les lignes en double d'un fichier

  2. Comment supprimer les mots en double d'un fichier texte brut à l'aide de la commande linux

  3. Comment utiliser sed pour supprimer les n dernières lignes d'un fichier

  4. Comment ajouter du texte à un fichier ?

  5. Supprimer les lignes paires ou impaires d'un fichier texte

Comment imprimer des lignes dupliquées dans un fichier texte sous Linux

Comment supprimer des lignes d'un fichier à l'aide de la commande Sed

Comment supprimer tous les espaces blancs d'un fichier texte

Comment créer des dessins ASCII dans l'éditeur Vim (dessiner des boîtes, des lignes, des ellipses, des flèches à l'intérieur d'un fichier texte)

Comment supprimer les retours à la ligne d'un fichier texte ?

Comment afficher certaines lignes d'un fichier texte sous Linux ?