615 votes

Trouver des lignes dupliquées dans un fichier et compter combien de fois chaque ligne a été dupliquée?

Supposons que j'ai un fichier semblable au suivant:

 123 
123 
234 
234 
123 
345
 

Je voudrais savoir combien de fois '123' a été dupliqué, combien de fois '234' a été dupliqué, etc. Donc idéalement, la sortie serait comme:

 123  3 
234  2 
345  1
 

896voto

wonk0 Points 4016

En supposant qu'il y ait un nombre par ligne:

 sort <file> | uniq -c
 

Vous pouvez également utiliser l'indicateur --count plus détaillé avec la version GNU, par exemple sur Linux:

 sort <file> | uniq --count
 

486voto

Andrea Points 1328

Cela n'imprimera que les lignes dupliquées , avec count (devrait fonctionner sur n'importe quel système Unix):

 sort FILE | uniq -c -d
 

ou, avec les longues options GNU (sous Linux):

 sort FILE | uniq --count --repeated
 

Pour l'exemple donné, le résultat serait:

   3 123
  2 234
 

76voto

kenorb Points 2464

Pour rechercher et compter les lignes dupliquées dans plusieurs fichiers, vous pouvez essayer la commande suivante:

 sort <files> | uniq -c | sort -nr
 

ou:

 cat <files> | sort | uniq -c | sort -nr
 

7voto

Marc B Points 195501

En supposant que vous avez accès à un environnement shell et / ou cygwin Unix standard:

 tr -s ' ' '\n' < yourfile | sort | uniq -d -c
       ^--space char
 

Fondamentalement: convertissez tous les caractères d'espace en sauts de ligne, puis triez la sortie traduite et alimentez-la en uniq et comptez les lignes dupliquées.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X