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?
grep char -o filename | wc -l
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.
écho "a/b/c/d/e/f/g" | awk -F "/" '{print NF}'
cela donnera le nombre d'occurrences du caractère "/"
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.
Alternative à grep:
sed 's/[^x]//g' filename | tr -d '\012' | wc -c
où x
est le caractère que vous souhaitez compter.
Vous pouvez essayer facilement: grep -c 'YOUR LETTER' YOUR FILE
Dans ce cas, je compte le caractère "|":
expr `wc -c < filename` \- `tr -d \| < filename | wc -c`
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).
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.
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