Valeur 123456789 en 123 456 789?

bob737 Messages postés 157 Statut Membre -  
UnGnU Messages postés 1468 Statut Contributeur -
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.

3 réponses

  1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    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
    1. bob737 Messages postés 157 Statut Membre
       
      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
    2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501 > bob737 Messages postés 157 Statut Membre
       
      Essaye comme ça :
      sed -e ':z' -e 's/\<...\B/& /' -e 'tz'
      0
    3. Utilisateur anonyme
       
      echo "12345678" | rev | sed 's/\([0-9]\{3\}\)/\1\ /g' | rev
      0
    4. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501 > Utilisateur anonyme
       
      Bien vu ;-))

      Et
      sed 's/[0-9]\{3\}/& /g'
      le fait aussi ;-)
      0
    5. 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
  2. Utilisateur anonyme
     
    salut,

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

      Bien vu, merci ;-)
      0
      1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501 > zipe31 Messages postés 34620 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
    2. bob737 Messages postés 157 Statut Membre
       
      mince...ça ne fonctionne pas chez moi!

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