Valeur 123456789 en 123 456 789?

bob737 Messages postés 144 Date d'inscription   Statut Membre Dernière intervention   -  
UnGnU Messages postés 1158 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je suis sous AIX. Pour une question de lisibilité, je souhaiterais mettre des espaces entre pour chaque millier d'un résultat d'un script en ksh .
J'ai cherché mais je ne trouve pas. ça devrait pouvoir se faire avec printf il me semble.

Merci de votre aide.


A voir également:

3 réponses

zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Salut,

Méthode barbare et imbuvable s'il en est ;-))

$ echo "123456789" | rev | sed ':z;s/\<...\B/& /;tz' | rev 
123 456 789

$ echo "1234567890" | rev | sed ':z;s/\<...\B/& /;tz' | rev
1 234 567 890

$ echo "1234567890123" | rev | sed ':z;s/\<...\B/& /;tz' | rev
1 234 567 890 123

$ echo "12345678901234" | rev | sed ':z;s/\<...\B/& /;tz' | rev
12 345 678 901 234

2
bob737 Messages postés 144 Date d'inscription   Statut Membre Dernière intervention  
 
Merci pour la réponse mais ça ne fonctionne pas chez moi. ;-)

sed: 0602-417 The label :z;s/\<...\B/& /;tz is greater than eight characters.
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431 > bob737 Messages postés 144 Date d'inscription   Statut Membre Dernière intervention  
 
Essaye comme ça :
sed -e ':z' -e 's/\<...\B/& /' -e 'tz'
0
Utilisateur anonyme
 
echo "12345678" | rev | sed 's/\([0-9]\{3\}\)/\1\ /g' | rev
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431 > Utilisateur anonyme
 
Bien vu ;-))

Et
sed 's/[0-9]\{3\}/& /g'
le fait aussi ;-)
0
Utilisateur anonyme
 
En recursif :

#!/bin/bash

function pr(){
	[[ "$1" -lt 1000 ]] && echo -n "$1" && exit 0
	echo -n $(cut -c -3 <<< $1)" "
	pr "$(cut -c 4- <<< $1)"
}

function revAndPr(){
	rev <<< $(pr $(rev <<< $1)) 
}

revAndPr 123456
revAndPr 12345678



$./nb.sh
123 456
12 345 678
0
Utilisateur anonyme
 
salut,

 $ printf "%'d\n" 123456789
123 456 789
voilà, voilà. XD
;)
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Salut,

Bien vu, merci ;-)
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431 > zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention  
 
Petite précision pour ceux qui comme moi se demandaient où QCQCPQ était allé pêcher l'information, c'était tout simplement dans le
man 3 printf
;-)

'      For  decimal  conversion  (i, d, u, f, F, g, G) the output is to be grouped with thou‐sands' grouping characters if the locale information indicates any. Note  that  many versions  of gcc(1) cannot parse this option and will issue a warning. SUSv2 does not include %'F.
0
bob737 Messages postés 144 Date d'inscription   Statut Membre Dernière intervention  
 
mince...ça ne fonctionne pas chez moi!

printf "%'d\n" 123456789
printf: 3016-004 Cannot form a valid conversion.
d
0
bob737 Messages postés 144 Date d'inscription   Statut Membre Dernière intervention  
 
Merci à tous! ça fonctionne avec sed.
Dommage que le printf ne fonctionne pas chez moi.
0