web-dev-qa-db-fra.com

Comment puis-je utiliser le shell UNIX pour compter le nombre de fois qu'une lettre apparaît dans un fichier texte?

J'ai quelques fichiers texte et j'aimerais compter combien de fois une lettre apparaît dans chacun?

Plus précisément, je voudrais utiliser le shell UNIX pour ce faire, sous la forme de: fichier cat | .... faire des choses...

Existe-t-il un moyen d'obtenir la commande wc pour ce faire?

36
samoz
grep char -o filename | wc -l
44
SilentGhost

Une autre alternative:

tr -d -C X <infile | wc -c

où X est le caractère ou la chaîne de caractères que vous souhaitez compter et infile est le fichier d'entrée.

12
Scott Lindsay

écho "a/b/c/d/e/f/g" | awk -F "/" '{print NF}'

cela donnera le nombre d'occurrences du caractère "/"

1
aravinda
awk '{ printf "%s\n", gsub( "ur_char", "oth_char", $0 ) }' < your_file_name > output.txt

vous pouvez ajouter le nombre de numéros de ligne actuels pour obtenir également les numéros de ligne dans awk.

1
dantesan

Alternative à grep:

sed 's/[^x]//g' filename | tr -d '\012' | wc -c

x est le caractère que vous souhaitez compter.

1
hlovdal

Vous pouvez essayer facilement: grep -c 'YOUR LETTER' YOUR FILE

1
Alfredo Mari

Dans ce cas, je compte le caractère "|":

expr `wc -c < filename` \- `tr -d \| < filename | wc -c`
1
Vinicius

Il y a aussi un awk:

$ echo -e "hello world\nbye all" | awk -Fl '{c += NF - 1} END {print c}'
5

Changement -Fl à -F<your character>.

Cela fonctionne en définissant le délimiteur de champ sur le caractère spécifié par -F, puis en accumulant le nombre de champs sur chaque ligne - 1 (car s'il y a un délimiteur, il y a deux champs - mais nous ne devons compter que 1).

1
Mark Rushakoff

essayez avec

grep  [PATTERN] -o [FILE] | wc -l

et s'il vous plaît ne pas utiliser de chat si ce n'est pas nécessaire.

0
Oliver Friedrich

Voici une autre façon

cat  input_file | \
awk 'BEGIN {FS="x"; var=0 } \
{if (NF>0){ var=var + (NF-1) } } \
END{print var}'

où X est le caractère ou la chaîne de caractères que vous souhaitez compter et infile est le fichier d'entrée

0
user1011046