Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 14/04/2021, à 00:44

zephyre123

[RESOLU]Mauvais nombre de ligne avec la commande wc -l

Bonjour,

J'ai crée le fichier = fichier_nom suivant :
pierre aza
isabelle lolo
kamaris touti

Ce fichier = fichier_nom est bien composé de trois lignes lorsque je l'édite avec mon éditeur de texte vim.

Cependant lorsque je fais la commande suivante :
wc -l fichier_nom

J'ai le retour suivant :
2 fichier_nom

Normalement je devrais voir 3 car le fichier est bien composé de trois lignes.

Je ne comprends pas, avez vous une explication ?

Dernière modification par zephyre123 (Le 14/04/2021, à 14:43)

Hors ligne

#2 Le 14/04/2021, à 00:53

MicP

Re : [RESOLU]Mauvais nombre de ligne avec la commande wc -l

Bonjour

C'est sans doute parce que la dernière ligne de ton fichier ne se termine pas par un retour à la ligne.

michel@xubu:~$ hd fichier 
00000000  70 69 65 72 72 65 20 61  7a 61 0a 69 73 61 62 65  |pierre aza.isabe|
00000010  6c 6c 65 20 6c 6f 6c 6f  0a 6b 61 6d 61 72 69 73  |lle lolo.kamaris|
00000020  20 74 6f 75 74 69                                 | touti|
00000026
michel@xubu:~$ 

Le fichier ne se termine pas par le caractère hexa 0A

michel@xubu:~$ wc -l fichier 
2 fichier
michel@xubu:~$ 
michel@xubu:~$ cat fichier
pierre aza
isabelle lolo
kamaris toutimichel@xubu:~$ 

Alors que :

michel@xubu:~$ wc -l fichier2 
3 fichier2
michel@xubu:~$ 
michel@xubu:~$ cat fichier2 
pierre aza
isabelle lolo
kamaris touti
michel@xubu:~$ 
michel@xubu:~$ hd fichier2 
00000000  70 69 65 72 72 65 20 61  7a 61 0a 69 73 61 62 65  |pierre aza.isabe|
00000010  6c 6c 65 20 6c 6f 6c 6f  0a 6b 61 6d 61 72 69 73  |lle lolo.kamaris|
00000020  20 74 6f 75 74 69 0a                              | touti.|
00000027
michel@xubu:~$ 

Dernière modification par MicP (Le 14/04/2021, à 00:58)

Hors ligne

#3 Le 14/04/2021, à 01:09

zephyre123

Re : [RESOLU]Mauvais nombre de ligne avec la commande wc -l

Pourtant lorsque j'édite le fichier avec vim et que j'affiche les caracteres invisibles comme le retour chariot je compte bien 3 retours chariots.
Voir ici l'image : https://zupimages.net/up/21/15/wioc.png
et le $=eof donc je pige toujours pas !

Ainsi wc -l fichier_nom devrai bien me donner 3 lignes et non 2

Je précise pour créer ce fichier = fichier_nom j'ai fait comme ça :
cat > fichier_nom
pierre aza [ENTER]
isabelle lolo [ENTER]
kamaris touti [CTRL-d] + [CTRL-d]

Et il me semble que dans l'unnivers linux CTRL-d fait bien un retour chariot.
voir stty -a

Donc je pige toujours pas !

Mais une chose pourrai aborder dans tout sens Micp c'est que quand je fais :
cat fichier_nom
pierre aza
isabelle lolo
kamaris toutimer. avril 14[02:15:03]

Je n'ai pas de retour chariot après kamaris touti et est coller à la date mer.avril 14 ...

Bref c'est vraiment bizarre !

Je vois le retour chariot avec mon éditeur de texte vim
mais je ne le vois pas lorsque je fais un cat

C'est quoi cette merde ?

Une dernière chose lorsque j'édite mon fichier avec vim et que j'affiche en caractère hexadécimal => termine par 0A
voir ci dessous :

00000000: 746f 746f 0a74 6974 690a 7461 7461 0a    toto.titi.tata.

Donc ton explication Micp ne tient pas la route !

Je pige toujours pas !

Dernière modification par zephyre123 (Le 14/04/2021, à 01:30)

Hors ligne

#4 Le 14/04/2021, à 01:31

Watael

Re : [RESOLU]Mauvais nombre de ligne avec la commande wc -l

ctrl-d, c'est pour interrompre une commande fin de transmission (EOF/EOT). Un terminal, par exemple. c'est pourquoi ça ferme le terminal.
tu remarqueras qu'un terminal ne peut pas être interrompu (fermé) avec Ctrl-d lorsqu'un caractère à été tapé sur la ligne.
edit: parce que, manifestement, si il y a un caractère sur la ligne, une édition est en cours, et donc une transmission est en cours

donc, ton fichier ne se termine, en fait, pas par un retour chariot, si tu interromps "l'édition" avec cat avec Ctrl-d.

pourquoi deux Ctrl-d sont-ils nécessaires ? je suppose qu'il y en a un pour fermer la redirection, et l'autre pour fermer cat...

Dernière modification par Watael (Le 14/04/2021, à 07:49)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#5 Le 14/04/2021, à 01:35

zephyre123

Re : [RESOLU]Mauvais nombre de ligne avec la commande wc -l

Alors dans ce cas Watael pourquoi lorsque j'édite le fichier avec vim en hexadécimal j'ai bien 0A tout à la fin comme je vous l'ai montré ?
Et ainsi wc devrai bien compter 3 lignes et non 2

Dernière modification par zephyre123 (Le 14/04/2021, à 01:39)

Hors ligne

#6 Le 14/04/2021, à 02:11

MicP

Re : [RESOLU]Mauvais nombre de ligne avec la commande wc -l

Dans son message #3, zephyre123 a écrit :


kamaris touti [CTRL-d] + [CTRL-d]

Si tu as entré Ctrl+d au lieu d’appuyer sur la touche Entrée,
c’est que tu n’as pas ajouté le caractère de fin de ligne (hexa 0A)

=======
Quand on enregistre le fichier,
vim ajoute automatiquement le caractère de fin de ligne final manquant.
Dans ce cas, si tu relances la ligne de commande wc -l sur le nouveau fichier
elle t’indiquera que ce fichier contient bien 3 lignes.

======
Si le caractère de fin de ligne était présent,
ton fichier aurait une taille de 39 octet.
Sans le caractère de fin de ligne final, il ne doit faire que 38 octets.

=======
Pour visualiser le contenu de ton fichier
utilise la commande hd comme je l’ai fait.

Dernière modification par MicP (Le 14/04/2021, à 02:34)

Hors ligne

#7 Le 14/04/2021, à 09:43

kamaris

Re : [RESOLU]Mauvais nombre de ligne avec la commande wc -l

C'est parce que tu as mis « kamaris » en dernière ligne de ton fichier : dans ce cas le saut de ligne final n'est pas enregistré, c'est un bug connu de vim tongue

Hors ligne

#8 Le 14/04/2021, à 14:43

zephyre123

Re : [RESOLU]Mauvais nombre de ligne avec la commande wc -l

lol Kamaris !
J'ai vérifié tout ce que tu as dit Micp et tout est exact !
Merci beaucoup j'ai tout compris

Hors ligne

#9 Le 14/04/2021, à 15:16

Watael

Re : [RESOLU]Mauvais nombre de ligne avec la commande wc -l

vim en hexadécimal j'ai bien 0A tout à la fin comme je vous l'ai montré ?

vim -b (ce que montre ton image) affiche les fins de lignes ($), pas les "retours chariot".

lorsque j'édite mon fichier avec vim et que j'affiche en caractère hexadécimal => termine par 0A

comme l'a dit MicP, vim ajoute le dernier retour à la ligne.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne