47 votes

génération d'une table de fréquence à partir d'un fichier

Étant donné un fichier d'entrée contenant un seul numéro par ligne, comment pourrais-je compter le nombre de fois qu'un élément s'est produit dans ce fichier ?

 cat input.txt
1
2
1
3
1
0

sortie souhaitée (=>[1,3,1,1]):

 cat output.txt
0 1
1 3
2 1
3 1

Ce serait formidable si la solution pouvait également être étendue aux nombres flottants.

86voto

Caleb Points 2021

Vous voulez dire combien de fois un élément apparaît dans le fichier d'entrée ? Triez-le d'abord (en utilisant -n si l'entrée est toujours des nombres comme dans votre exemple), puis comptez les résultats uniques.

 sort -n input.txt | uniq -c

12voto

glenn jackman Points 69748

Une autre option:

 awk '{n[$1]++} END {for (i in n) print i,n[i]}' input.txt | sort -n > output.txt

3voto

agc Points 4529

Utilisation de maphimbu du paquet Debian stda :

 # use 'jot' to generate 100 random numbers between 1 and 5
# and 'maphimbu' to print sorted "histogram":
jot -r 100 1 5 | maphimbu -s 1

Sortir:

              1                20
             2                21
             3                20
             4                21
             5                18

maphimbu fonctionne également avec la virgule flottante :

 jot -r 100.0 10 15 | numprocess /%10/ | maphimbu -s 1

Sortir:

              1                21
           1.1                17
           1.2                14
           1.3                18
           1.4                11
           1.5                19

3voto

pavium Points 7845

Au moins une partie de cela peut être fait avec

 sort output.txt | uniq -c

Mais l'ordre number count est inversé. Cela résoudra ce problème.

 sort test.dat | uniq -c | awk '{print $2, $1}'

1voto

En plus des autres réponses, vous pouvez utiliser awk pour créer un graphique simple . (Mais, encore une fois, ce n'est pas un histogramme.)

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