Existe-t-il un moyen sous linux / terminal de compter, combien de fois le caractère f apparaît-il dans un fichier texte brut?
Existe-t-il un moyen sous linux / terminal de compter, combien de fois le caractère f apparaît-il dans un fichier texte brut?
Réponses:
Que dis-tu de ça:
fgrep -o f <file> | wc -l
Remarque: En plus d'être beaucoup plus facile à mémoriser / dupliquer et personnaliser, c'est environ trois fois (désolé, éditez! A bâclé le premier test) que la réponse de Vereb.
\r
ou de \n
caractères; la tr -cd f
réponse fonctionne pour cela.
a
, b
et c
, utilisez egrep
: egrep -o 'a|b|c' <file> | wc -l
.
wc -c
comme dans la tr
réponse: puisque les grep
sorties ligne par ligne, wc
compteraient les fins de lignes comme des caractères (d'où le doublement du nombre de caractères).
\r
, mais pour compter \n
pourquoi ne pas simplement utiliser wc -l
?
même plus vite:
tr -cd f < file | wc -c
Temps pour cette commande avec un fichier avec 4,9 Mo et 1100000 occurrences du caractère recherché:
real 0m0.089s
user 0m0.057s
sys 0m0.027s
Temps de réponse Vereb avec echo
, cat
, tr
et bc
pour le même fichier:
real 0m0.168s
user 0m0.059s
sys 0m0.115s
Le temps de réponse Rob Hruska avec tr
, sed
et wc
pour le même fichier:
real 0m0.465s
user 0m0.411s
sys 0m0.080s
Il est temps de répondre Jefromi avec fgrep
et wc
pour le même fichier:
real 0m0.522s
user 0m0.477s
sys 0m0.023s
a
, b
et c
: tr -cd abc < file | wc -l
.
tr -cd abc < file | wc -c
place
echo $(cat <file> | wc -c) - $(cat <file> | tr -d 'A' | wc -c) | bc
où le A est le caractère
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
cat
s inutiles , en donnant le nom de fichier comme argument à wc
et tr
.
stdin
, mais cela peut être diffusé plutôt que cat
ed:tr -d 'A' < <file> | wc ...
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» par votre caractère et de «fichier» par votre fichier d'entrée.
tr -d '\n' < file
: supprime les nouvelles lignessed 's/A/A\n/g
: ajoute une nouvelle ligne après chaque occurrence de "A"wc -l
: compte le nombre de lignesExemple:
$ cat file
abcdefgabcdefgababababbbba
1234gabca
$ tr -d '\n' < file | sed 's/a/a\n/g' | wc -l
9