Contenu | Rechercher | Menus

Annonce

Ubuntu 16.04 LTS
Commandez vos DVD et clés USB Ubuntu-fr !

Pour en savoir un peu plus sur l'équipe du forum.

Appel à contributeurs pour la doc.

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.

#1 Le 15/03/2017, à 06: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, à 19:06)


Ubuntu 16.04 64 bits (depuis juillet 2016) , gnome3 en essai (juin 2017)
divers versions Ubuntu et Studio 14.04 LTS 64 bits
(01/2017 ) :PC          : Intel(R) Pentium(R) Dual  CPU  E2180  @ 2.00GHz 2Go de RAM 800 MHz
(06/2017) : Portable : Intel(R) Core(TM)2  Duo CPU     T5750  @ 2.00GHz 3Go de RAM DDR2 667 Mhz

Hors ligne

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

Watael

Re : [Résolu] bug bash printf

salut,

oui, c'est connu : bug-bash


eval, c'est mal.

Hors ligne

#3 Le 15/03/2017, à 10: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, à 11: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, à 11:14

Watael

Re : [Résolu] bug bash printf

+1


eval, c'est mal.

Hors ligne

#6 Le 15/03/2017, à 19: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 !!!!!!!


Ubuntu 16.04 64 bits (depuis juillet 2016) , gnome3 en essai (juin 2017)
divers versions Ubuntu et Studio 14.04 LTS 64 bits
(01/2017 ) :PC          : Intel(R) Pentium(R) Dual  CPU  E2180  @ 2.00GHz 2Go de RAM 800 MHz
(06/2017) : Portable : Intel(R) Core(TM)2  Duo CPU     T5750  @ 2.00GHz 3Go de RAM DDR2 667 Mhz

Hors ligne