J'ai utilisé la commande wc -c pour compter le nombre de caractères mais cela me donne un mauvais numéro, nombre de caractères plus un comme exemple:
echo "k" | wc -c
ça me donne 2 personnages
alors pourquoi pas 1?
J'ai utilisé la commande wc -c pour compter le nombre de caractères mais cela me donne un mauvais numéro, nombre de caractères plus un comme exemple:
echo "k" | wc -c
ça me donne 2 personnages
alors pourquoi pas 1?
Réponses:
Jetez un œil au message d'aide de wc. L' -coption imprime le nombre de caractères. La echocommande inclut un caractère de nouvelle ligne par défaut. Quand wcvoit la nouvelle ligne, il le compte comme un autre personnage et donc le compte supplémentaire dans votre résultat. Vous pouvez contourner ce problème en utilisant l'une des alternatives indiquées ci-dessous; -wcompte le nombre de mots et -lcompte le nombre de lignes.
echo "k" | wc -w
echo "k" | wc -l
Vous pouvez diriger la sortie de wcvers awkpour obtenir le nombre de caractères à l'exclusion des caractères de nouvelle ligne:
wc <filename> | awk '{print $3-$1}'
La sortie par défaut de wcwith no options affiche le nombre de caractères de nouvelle ligne ($ 1 à awk), le nombre de mots et le nombre de caractères ($ 3 à awk) dans cet ordre.
echo -n "k" | wc -c. Cela a du sens
printfest souvent préféré avant echolorsque la cohérence est importante. Il n'imprime pas de nouvelle ligne à moins que cela ne soit spécifiquement demandé, donc printf "k" | wc -mdonne 1, c'est-à-dire le nombre de caractères imprimés. Pour compter les caractères dans la première ligne d'un fichier, on peut faire par exemple $(($(head -1 file | wc -m)-1))(envelopper $(())pour faire de l'arithmétique shell pour supprimer le compte de la nouvelle ligne) ou encore mieux: utiliser awk et do awk 'NR==1{print length}' file.
lorsque vous echo "k", la echocommande ajoute un caractère de nouvelle ligne à tout ce que vous lui avez demandé d'imprimer ("k"). Vous pouvez utiliser l' -noption pour désactiver cela:
echo -n k | wc -c
1
Pour visualiser ce personnage invisible , vous pouvez vider le flux avec odou hd:
echo k | od -t c
0000000 k \n
echo k | hd
00000000 6b 0a |k.|
echo k | od -t a -A n
k nl
-coption est un nombre d'octets, pas un nombre de caractères