Valeur 123456789 en 123 456 789?

Fermé
bob737 Messages postés 144 Date d'inscription jeudi 24 septembre 2009 Statut Membre Dernière intervention 14 mars 2024 - 20 janv. 2017 à 14:50
UnGnU Messages postés 1158 Date d'inscription lundi 2 mai 2016 Statut Contributeur Dernière intervention 22 décembre 2020 - 23 janv. 2017 à 11:37
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 dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
20 janv. 2017 à 15:34
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 jeudi 24 septembre 2009 Statut Membre Dernière intervention 14 mars 2024
20 janv. 2017 à 16:40
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 dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419 > bob737 Messages postés 144 Date d'inscription jeudi 24 septembre 2009 Statut Membre Dernière intervention 14 mars 2024
20 janv. 2017 à 17:47
Essaye comme ça :
sed -e ':z' -e 's/\<...\B/& /' -e 'tz'
0
Utilisateur anonyme
21 janv. 2017 à 17:32
echo "12345678" | rev | sed 's/\([0-9]\{3\}\)/\1\ /g' | rev
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419 > Utilisateur anonyme
21 janv. 2017 à 18:30
Bien vu ;-))

Et
sed 's/[0-9]\{3\}/& /g'
le fait aussi ;-)
0
Utilisateur anonyme
22 janv. 2017 à 09:52
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
20 janv. 2017 à 18:45
salut,

 $ printf "%'d\n" 123456789
123 456 789
voilà, voilà. XD
;)
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
20 janv. 2017 à 19:54
Salut,

Bien vu, merci ;-)
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419 > zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021
21 janv. 2017 à 11:22
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 jeudi 24 septembre 2009 Statut Membre Dernière intervention 14 mars 2024
23 janv. 2017 à 10:40
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 jeudi 24 septembre 2009 Statut Membre Dernière intervention 14 mars 2024
23 janv. 2017 à 10:44
Merci à tous! ça fonctionne avec sed.
Dommage que le printf ne fonctionne pas chez moi.
0