Compter les occurrences d'un caractère dans un fichier texte brut
Question
Existe-t-il un moyen de compter sous linux / terminal combien de fois le caractère f apparaît dans un fichier texte brut?
La solution
Que diriez-vous de cela:
fgrep -o f <file> | wc -l
Remarque: outre qu’il est beaucoup plus facile de mémoriser / dupliquer et personnaliser, il est environ trois fois plus rapide que la réponse de Vereb (désolé, modifiez le premier test).
Autres conseils
encore plus vite:
tr -cd f < file | wc -c
Heure de cette commande avec un fichier contenant 4,9 Mo et 1100000 occurrences du caractère recherché:
real 0m0.089s
user 0m0.057s
sys 0m0.027s
Temps pour la réponse Vereb 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 sed
, wc
et fgrep
pour le même fichier:
real 0m0.465s
user 0m0.411s
sys 0m0.080s
Il est temps que Jefromi réponde avec <=> et <=> pour le même fichier:
real 0m0.522s
user 0m0.477s
sys 0m0.023s
echo $(cat <file> | wc -c) - $(cat <file> | tr -d 'A' | wc -c) | bc
où A est le caractère
Durée de cette commande avec un fichier contenant 4,9 Mo et 1100000 occurrences du caractère recherché:
real 0m0.168s
user 0m0.059s
sys 0m0.115s
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.
tr -d '\n' < file | sed 's/A/A\n/g' | wc -l
Remplacement des deux occurrences de " A " avec votre personnage et " fichier " avec 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