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

supposons que j'ai un fichier similaire 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
405
demandé sur lkisac 2011-07-15 23:53:00
la source

7 ответов

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

sort <file> | uniq -c

vous pouvez utiliser le drapeau plus verbeux --count aussi avec la version GNU, par exemple, sur Linux:

sort <file> | uniq --count
625
répondu wonk0 2014-10-22 19:13:21
la source

ce sera imprimer les lignes en double seulement , avec des comptes:

sort FILE | uniq -cd

ou, avec GNU longs (sur Linux):

sort FILE | uniq --count --repeated

sur BSD et OSX, vous devez utiliser grep pour filtrer des lignes uniques:

sort FILE | uniq -c | grep -v '^ *1 '

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

  3 123
  2 234

Si vous voulez impression compte pour toutes les lignes , y compris ceux qui apparaissent une seule fois:

sort FILE | uniq -c

ou, avec GNU longs (sur Linux):

sort FILE | uniq --count

pour l'entrée donnée, la sortie est:

  3 123
  2 234
  1 345

pour trier la sortie avec les lignes les plus fréquentes sur le dessus, vous pouvez faire ce qui suit (pour obtenir tous les résultats):

sort FILE | uniq -c | sort -nr

ou, pour obtenir que des lignes dupliquées, les plus fréquents en premier:

sort FILE | uniq -cd | sort -nr

sur OSX et BSD Le dernier devient:

sort FILE | uniq -c | grep -v '^ *1 ' | sort -nr
319
répondu Andrea 2017-05-23 14:54:58
la source

Pour trouver 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
64
répondu kenorb 2013-07-11 01:06:14
la source

Via :

awk '{dups[]++} END{for (num in dups) {print num,dups[num]}}' data

dans la commande awk 'dups[]++' , la variable contient tout le contenu de la colonne 1 et les crochets sont des accès aux tableaux. Ainsi, pour chaque 1ère colonne de ligne dans le fichier data , le noeud du tableau nommé dups est incrémenté.

et à la fin, nous faisons une boucle au-dessus du tableau dups avec num comme variable et nous imprimons les numéros sauvegardés d'abord leur nombre de valeurs dupliquées par dups[num] .

notez que votre fichier d'entrée a des espaces à la fin de certaines lignes, si vous les Clarifiez, vous pouvez utiliser "151980920" à la place de dans la commande ci-dessus:)

23
répondu αғsнιη 2015-04-01 16:01:38
la source

Dans windows à l'aide de "Windows PowerShell" j'ai utilisé la commande mentionnée ci-dessous pour réaliser cette

Get-Content .\file.txt | Group-Object | Select Name, Count

nous pouvons également utiliser le Cmdlet où-objet pour filtrer le résultat""

Get-Content .\file.txt | Group-Object | Where-Object { $_.Count -gt 1 } | Select Name, Count
10
répondu vineel 2017-05-31 16:13:49
la source

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

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

essentiellement: Convertissez tous les caractères de l'espace en linebreaks, puis triez la sortie tranlsated et alimentez cela en uniq et comptez les lignes dupliquées.

7
répondu Marc B 2011-07-15 23:57:12
la source

si quelqu'un cherche le site Web en ligne qui fait le même travail:

http://www.kennistranslations.com/wordcount

0
répondu PBA 2018-04-02 17:12:44
la source

Autres questions sur file duplicates count find lines