6 votes

Comment compter chaque type de caractère (et les totaliser) dans un fichier texte ?

Je me demandais si quelqu'un pouvait me dire comment compter les occurrences de chaque caractère différent dans un fichier texte et aussi un total de toutes les occurrences de tout ce qui est additionné à la fin.

J'essaie simplement d'apprendre le processus pour ma propre connaissance.

7voto

sudodus Points 39902

Compte général avec wc

Vous pouvez utiliser wc pour compter les lignes, les mots, les caractères, les octets ... mais pas le nombre de chaque caractère. Voir man wc .

Compter le nombre de chaque caractère séparé

Si vous souhaitez énumérer le numéro de chaque caractère séparé, vous pouvez

  • commence par imprimer chaque caractère sur une ligne séparée avec grep
  • puis les trier avec sort
  • puis utiliser uniq pour imprimer le nombre de chaque type

Ejemplos

Exemples en supposant que vous ayez également un lien vers un fichier dictionnaire (liste de mots) à l'adresse suivante /usr/share/dict/words

$ wc --lines --words --chars --bytes /usr/share/dict/words
102305 102305 971304 971578 /usr/share/dict/words

Il y a plus d'octets que de caractères car certains caractères sont constitués de plus d'un octet (par exemple les derniers caractères [umlaut] de la liste ci-dessous).

  $ < /usr/share/dict/words grep -o '.' |sort |uniq -c
  29105 '
  65630 a
   1438 A
     12 á
      6 â
  14654 b
   1481 B
  31144 c
   1636 C
      5 ç
  28422 d
    844 D
  90579 e
    653 E
    148 é
     29 è
      6 ê
  10380 f
    538 F
  22501 g
    852 G
  19325 h
    919 H
  68343 i
    361 I
      2 í
   1482 j
    560 J
   8188 k
    680 K
  41512 l
    942 L
  21488 m
   1768 M
  58328 n
    587 N
      8 ñ
  50187 o
    409 O
     10 ó
      2 ô
  21691 p
   1049 P
   1492 q
     72 Q
  58312 r
    782 R
  92909 s
   1656 S
  53309 t
    908 T
  26773 u
    140 U
      3 û
   7870 v
   7281 w
    352 V
    533 W
   2139 x
     44 X
  12896 y
    154 Y
     14 ü
   3266 z
    161 Z
      3 å
      2 Å
      7 ä
     17 ö

5voto

Il existe un moyen très simple de compter chaque caractère dans un fichier texte. J'ai utilisé votre propre question comme fichier texte (appelé countc) et j'ai testé ce code :

grep '.' -o countc | awk '{a[$1]++} END {for (i in a) print i,a[i]}'

et voilà ce que vous obtenez :

' 1
h 9
u 6
 46
v 1
i 7
j 2
w 5
k 1
x 1
l 10
y 4
m 3
n 16
a 14
. 2
o 19
p 1
c 12
I 2
d 9
r 14
e 28
f 8
s 8
g 5
t 21

Les tableaux awk sont très utiles pour ce type d'opérations.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X