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 15/03/2017, à 05:35

ar barzh paour

[Résolu] bug bash printf

p.... d'accents
mais c'est peut-être connu des habitués du bash
j'ai cherché longtemps pourquoi je n'avais pas un affichage correct

#!/bin/bash
nb_lignes_lues=1314
 nb_lignes_cons=512
  nb_lignes_sup=802
echo
printf "%-40s %s %5d\n" "nombre de lignes lues" " : " "$nb_lignes_lues"
printf "%-40s %s %5d\n" "lignes conservées" " : " "$nb_lignes_cons"
printf "%-40s %s %5d\n" "lignes supprimées" " : " "$nb_lignes_sup"

m'affichait

nombre de lignes lues                     :   1314
lignes conservées                        :    512
lignes supprimées                        :    802

avant de m'apercevoir que printf est buggé

#!/bin/bash
nb_lignes_lues=1314
printf "%-40s%s%5d\n" "abcdefghijklmnopqrstuvwxyz" ":" "$nb_lignes_lues"
printf "%-40s%s%5d\n" "àbcdéfghijklmnopqrstùvwxyz" ":" "$nb_lignes_lues"

qui affiche

abcdefghijklmnopqrstuvwxyz              : 1314
àbcdéfghijklmnopqrstùvwxyz           : 1314

pour avoir un résultat correct au premier code de bash ,
je dois
rectifier la longueur attribuée aux deux dernières chaînes

#!/bin/bash
nb_lignes_lues=1314
 nb_lignes_cons=512
  nb_lignes_sup=802
#correction
printf "%-40s %s %5d\n" "nombre de lignes lues" " : " "$nb_lignes_lues"
printf "%-41s %s %5d\n" "lignes conservées" " : " "$nb_lignes_cons"
printf "%-41s %s %5d\n" "lignes supprimées" " : " "$nb_lignes_sup"

qui m'affiche bien

nombre de lignes lues                     :   1314
lignes conservées                         :    512
lignes supprimées                         :    802

Dernière modification par ar barzh paour (Le 15/03/2017, à 18:06)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#2 Le 15/03/2017, à 08:59

Watael

Re : [Résolu] bug bash printf

salut,

oui, c'est connu : bug-bash


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

Hors ligne

#3 Le 15/03/2017, à 09:11

bruno

Re : [Résolu] bug bash printf

http://unix.stackexchange.com/questions … ing-umlaut

En fait ce n'est pas un bug, c'est comme cela que fonctionne printf avec bash :  avec %40s ce sont 40 octets et non 40 caractères qui sont comptés. Chaque lettre accentuée étant codé su 2 octets ru obtient un décalage d'un caractère chaque fois.

Hors ligne

#4 Le 15/03/2017, à 10:02

pingouinux

Re : [Résolu] bug bash printf

Bonjour,
Un bricolage pour s'en sortir :

#!/bin/bash
L=40
nb_lignes_lues=1314
lon() ( echo $(( L + $(wc -c <<<"$1") - $(wc -m <<<"$1") )) )

txt="abcdefghijklmnopqrstuvwxyz"
printf "%-*s  :%5d\n" $(lon "$txt") "$txt" "$nb_lignes_lues"

txt="àbcdéfghijklmnopqrstùvwxyz"
printf "%-*s  :%5d\n" $(lon "$txt") "$txt" "$nb_lignes_lues"

dont voici le résultat :

abcdefghijklmnopqrstuvwxyz                : 1314
àbcdéfghijklmnopqrstùvwxyz                : 1314

Hors ligne

#5 Le 15/03/2017, à 10:14

Watael

Re : [Résolu] bug bash printf

+1


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

Hors ligne

#6 Le 15/03/2017, à 18:06

ar barzh paour

Re : [Résolu] bug bash printf

merci à tous
j'ai la mémoire courte je m'étais déjà fait piégé par cut !!!!!!!!!!!
https://forum.ubuntu-fr.org/viewtopic.php?id=1117611

@pingouinux toujours une solution à tout !!!!!!!


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne