Y a-t-il un moyen, sous linux/terminal, de compter, combien de fois le caractère se trouve dans un fichier texte?Comptabiliser les occurrences d'un caractère dans un fichier texte brut
Répondre
Que diriez-vous de thi s:
fgrep -o f <file> | wc -l
Note: Outre beaucoup plus facile à mémoriser/dupliquer et personnaliser, c'est environ trois fois (désolé, éditer! bâclé le premier test) plus vite que la réponse de Vereb.
Celui-ci ne fonctionne pas si vous avez besoin de compter les caractères' \ r' ou '\ n'; la réponse 'tr -cd f' fonctionne pour ça. – bjnord
Pour compter plusieurs caractères, par ex. 'a',' b' et 'c', utilisez' egrep': 'egrep -o 'a | b | c'
De même, prenez garde de NE PAS utiliser 'wc -c' comme dans la réponse' tr': puisque 'grep' sort ligne par ligne,' wc' compte les fins de ligne comme caractères (doublant ainsi le nombre de caractères). –
echo $(cat <file> | wc -c) - $(cat <file> | tr -d 'A' | wc -c) | bc
où A est le caractère
temps pour cette commande avec un fichier avec 4,9 Mo et 1100000 occurences du caractère recherché:
real 0m0.168s
user 0m0.059s
sys 0m0.115s
Cela devient environ un tiers plus rapide si vous enlevez le 'chat 'inutile, en donnant le nom de fichier comme argument à' wc' et 'tr'. – Cascabel
malheureusement tr fonctionne uniquement sur l'entrée standard – Vereb
Si vous voulez vraiment optimiser cela lit le fichier une seule fois: echo $ (stat -c% s
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 lignessed '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
Si tout ce que vous devez faire est de compter le nombre de lignes contenant votre personnage, cela fonctionne:
grep -c 'f' myfile
Cependant, il compte plusieurs occurrences de « f » sur la même ligne en un seul match.
encore plus rapide:
tr -cd f < file | wc -c
temps pour cette commande avec un fichier avec 4,9 Mo et 1100000 occurences 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
temps pour répondre Rob Hruska avec tr
, sed
et wc
pour le même fichier:
real 0m0.465s
user 0m0.411s
sys 0m0.080s
temps pour la réponse Jefromi avec fgrep
et wc
pour le même fichier:
real 0m0.522s
user 0m0.477s
sys 0m0.023s
Pour compter plusieurs caractères, par ex. 'a',' b' et 'c':' tr -cd abc
Vous m'avez sauvé trouver la bonne syntaxe pour 'tr'! – Pysis
appartient à super-utilisateur – Malfist
Techniquement, cela pourrait être considéré comme un sh/bash/etc. question de programmation, donc je pense qu'il a une validité à l'un ou l'autre endroit. –
@Rob Hruska: oui, je pense aussi que la programmation bash ... @abrashka: la réponse à votre première et deuxième question est "NON"! – cupakob