web-dev-qa-db-fra.com

Comptage du nombre de caractères dans un fichier via un script Shell

Je souhaite vérifier le nombre de caractères d'un fichier depuis le début du caractère EOF. Quelqu'un peut-il me dire comment faire cela avec le script Shell

58
Shweta

Cela va le faire:

wc -c filename

Si vous voulez seulement le nombre sans que le nom du fichier soit répété dans la sortie:

wc -c < filename

Modifier:

Utilisez -m pour compter le caractère au lieu d'octets (comme indiqué dans la réponse de Sébastien).

89
Dennis Williamson
#!/bin/sh

wc -m $1 | awk '{print $1}'

wc -m compte le nombre de caractères; la commande awk imprime le nombre de caractères uniquement, en omettant le nom de fichier.

wc -c vous donnerait le nombre d'octets (qui peut être différent du nombre de caractères, car en fonction du codage, vous pouvez avoir un caractère codé sur plusieurs octets).

23
awk '{t+=length($0)}END{print t}' file3
4
Vijay

Pour obtenir le nombre exact de caractères de chaîne, utilisez printf, par opposition à echo, cat ou exécutez wc -c directement sur un fichier, car echo, cat, etc. compteront un caractère de nouvelle ligne, ce qui vous donnera le nombre de caractères, y compris le caractère de nouvelle ligne. Ainsi, un fichier avec le texte 'hello' imprimera 6 si vous utilisez echo, etc., mais si vous utilisez printf, il retournera l'exact 5, car aucun élément de nouvelle ligne ne sera pris en compte.

Comment utiliser printf pour compter les caractères dans les chaînes:

$printf '6chars' | wc -m
6

Pour transformer cela en un script que vous pouvez exécuter sur un fichier texte pour compter les caractères, enregistrez ce qui suit dans un fichier nommé print-character-amount.sh:

#!/bin/bash
characters=$(cat "$1")
printf "$characters" | wc -m

chmod + x dans le fichier print-character-amount.sh contenant le texte ci-dessus, placez le fichier dans votre PATH (c'est-à-dire/usr/bin/ou tout répertoire exporté en tant que PATH dans votre fichier .bashrc), puis exécutez le script sur le type de fichier texte:

print-character-amount.sh file-to-count-characters-of.txt
3
user.py

awk seulement

awk 'BEGIN{FS=""}{for(i=1;i<=NF;i++)c++}END{print "total chars:"c}' file

Shell seulement

var=$(<file)
echo ${#var}

Rubis (1.9+)

Ruby -0777 -ne 'print $_.size' file
1
kurumi

Le script suivant est testé et donne exactement les résultats attendus

\#!/bin/bash

echo "Enter the file name"

read file

echo "enter the Word to be found"

read Word

count=0

for i in \`cat $file`

do

if [ $i == $Word ]

then

count=\`expr $count + 1`

fi

done

echo "The number of words are $count"
0
Paresh

J'aurais pensé qu'il serait préférable d'utiliser stat pour trouver la taille d'un fichier, car le système de fichiers le sait déjà, plutôt que de faire en sorte que le fichier entier soit lu avec awk ou wc - surtout s'il s'agit d'une Fichier GB ou fichier pouvant ne pas être résident dans le système de fichiers d’un HSM.

stat -c%s file

Oui, je concède que cela ne tient pas compte des caractères multi-octets, mais ajouterais que le PO n'a jamais clarifié s'il s'agissait ou non d'un problème. 

0
Mark Setchell

Crédits à user.py et al.


echo "ää" > /tmp/your_file.txt
cat /tmp/your_file.txt | wc -m

résultats dans 3.

Dans mon exemple, le résultat devrait être 2 (deux fois la lettre ä). Cependant, echo (ou vi) ajoute un saut de ligne \n à la fin de la sortie (ou du fichier). Donc, deux ä et un saut de ligne Linux \n sont comptés. C'est trois ensemble.

Travailler avec des pipes | n'est pas la variante la plus courte, mais je dois donc connaître moins de paramètres wc par cœur. De plus, cat est à l'épreuve des balles selon mon expérience.

Testé sur Ubuntu 18.04.1 LTS (Bionic Beaver).

0
qräbnö