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
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).
#!/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).
awk '{t+=length($0)}END{print t}' file3
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
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
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"
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.
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).