web-dev-qa-db-fra.com

Commande WC sous linux

Ce qui suit est le contenu stocké dans mon fichier

This is my Input

Donc, en utilisant la commande wc -c, nous pouvons obtenir le nombre de caractères stockés dans le fichier.

Mon résultat attendu pour le fichier ci-dessus qui a été modifié à l'aide deVIMin Ubuntu est égal à 16. Toutefois, la commande wc -c renvoie 17.

Pourquoi la sortie est-elle comme ça? Il n'y a même pas de retour de voiture en fin de ligne. Alors, quel est le 17ème caractère? 

4
mrg

bien sur vous aviez entrer. peut-être que vous ne pouvez pas le voir. considérons ces deux exemples:

 echo -n "This is my Input" | wc -c
 16

parce que -n est pour éviter d'entrer mais

echo  "This is my Input" | wc -c
 17

regardez cet exemple aussi voir la nouvelle ligne. 

 enter image description here

Comment voir newline?

echo "This is my Input" | od -c

od dump files en octal et autres formats
- c sélectionnez ASCII caractères ou des barres obliques inverses

Et voici un exemple de fichier et d'utilisation de od  enter image description here

7
Fattaneh Talebi

Vous avez 17 à cause du caractère '/ 0'.

1
Helper

Sous Linux, lorsqueVIMsave buffers, il mettra fin à chaque ligne en ajoutant le fin de ligne de la nouvelle ligne. Le vidage hexadécimal deVIMfichier modifié.

Vous pouvez ouvrir votre fichier et saisir :!xxd pour afficher hex-dump ou utiliser directement la commande hexdump yourfile.

0000000: 5468 6973 2069 7320 6d79 2049 6e70 7574  This is my Input
0000010: 0a                                       .
~                                                                                                                                 
~                                                                                                                                 
~    

Vous pouvez voir ici que le fichier a ajouté 0a à la fin du fichier.

ainsi, lorsque vous utilisez wc -c pour obtenir le numéro de ce fichier, il renverra 17 qui contient le nouveau symbole de ligne. 

1
chengpohi

la chaîne d'entrée que vous donnez comme entrée n'a pas d'entrée/nouvelle ligne, mais echo lui attribue entrée/nouvelle ligne. Et wc -c lit enter ou newline à partir de la commande echo.

par exemple

echo k | wc -c 

retourne 2 parce que 1 pour k et 1 pour la nouvelle ligne ajoutée par echo

tandis que

echo -n k | wc -c

renvoie 1 car -n supprime la nouvelle ligne.

mais wc -c lit toujours les nouvelles lignes.

Tu peux essayer

printf k | wc -c 

renvoie 1

voir ce qu'il fait dans le fichier

bash-4.1$ echo 1234 > newfile
bash-4.1$ cat newfile
1234
bash-4.1$ cat -e newfile
1234$
bash-4.1$ printf 1234 > newfile
bash-4.1$ cat newfile
1234bash-4.1$ cat -e newfile
1234bash-4.1$
0
Shravan Yadav