web-dev-qa-db-fra.com

Compter les occurrences d'un caractère dans un fichier texte brut

Existe-t-il un moyen de compter sous linux/terminal, combien de fois le caractère f apparaît dans un fichier en texte brut?

125
cupakob

Que dis-tu de ça:

fgrep -o f <file> | wc -l

Remarque: outre qu'il est beaucoup plus facile de mémoriser/dupliquer et personnaliser, cela est environ trois fois plus rapide que la réponse de Vereb.

173
Cascabel

même plus vite:

tr -cd f < file | wc -c

heure de cette commande avec un fichier contenant 4,9 MB et 1100000 occurrences du caractère recherché:

real   0m0.089s
user   0m0.057s
sys    0m0.027s

Il est temps que Vereb réponde avec echo, cat, tr et bc pour le même fichier:

real   0m0.168s
user   0m0.059s
sys    0m0.115s

Il est temps que Rob Hruska réponde avec tr, sed et wc pour le même fichier:

real   0m0.465s
user   0m0.411s
sys    0m0.080s

Il est temps que Jefromi réponde avec fgrep et wc pour le même fichier:

real   0m0.522s
user   0m0.477s
sys    0m0.023s 
62
user1985553
echo $(cat <file>  | wc -c) - $(cat <file>  | tr -d 'A' | wc -c) | bc

où le A est le personnage

Temps pour cette commande avec un fichier avec 4,9 Mo et 1100000 occurrences du caractère recherché:

real   0m0.168s
user   0m0.059s
sys    0m0.115s
8
Vereb

Si tout ce que vous avez à faire est de compter le nombre de lignes contenant votre personnage, cela fonctionnera:

grep -c 'f' myfile

Cependant, il compte plusieurs occurrences de "f" sur la même ligne comme une seule correspondance.

6
Jongo the Gibbon

tr -d '\n' < file | sed 's/A/A\n/g' | wc -l

Remplacer les deux occurrences de "A" par votre personnage et de "fichier" par votre fichier d'entrée.

  • tr -d '\n' < file: supprime les nouvelles lignes
  • sed 's/A/A\n/g: ajoute une nouvelle ligne après chaque occurrence de "A"
  • wc -l: compte le nombre de lignes

Exemple:

$ cat file
abcdefgabcdefgababababbbba


1234gabca

$ tr -d '\n' < file | sed 's/a/a\n/g' | wc -l
9
4
Rob Hruska