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?

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top