Formater un nombre avec des 0 en shell Unix

Résolu
tbeghain Messages postés 63 Statut Membre -  
 eko -
Bonjour,

Je voudrais formater en shell Unix, un chiffre de façon qu'il ait toujours deux positions numériques. par exemple 1 devient 01, 2 devient 02, etc...

Bien sûr, je peux le faire avec un peu de programmation, mais est-il possible de la faire avec une commande simple ?

Merci
Configuration: AIX 5.2

8 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,
    [tmpfs]$ for i in $(seq 10); do printf "%02d\n" "$i"; done
    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    
    ;-))
    2
    1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
       
      Ça ce n’est plus de la synchronisation
      C’est au niveau supérieur, de la télépathie par exemple ;-))
      0
      1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention  
         
        C'est clair ;-))

        Mais il y a du avoir des interférences, j'ai pas bien perçu le "20" ;-DDDDD
        0
  2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    il y a la commande printf
    root@debian:~# for i in $(seq 20);do printf "%02d\n" $i;done
    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    1
  3. Gotrune Messages postés 55 Date d'inscription   Statut Membre 3
     
    tu peut essayer un code du type:
    '0'&$1
    0
  4. tbeghain Messages postés 63 Statut Membre 3
     
    Merci beaucoup, le printf fait très exactement ce que je voulais
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. tbeghain Messages postés 63 Statut Membre 3
     
    Désolé, mais j'ai un petit truc bizarre avec le printf avec les chiffres 8 et 9 exclusivement

    En exécutant le script suivant :
    AA=` printf "%02d\n" "07" `
    echo $AA
    AA=` printf "%02d\n" "08" `
    echo $AA
    AA=` printf "%02d\n" "09" `
    echo $AA
    AA=` printf "%02d\n" "10" `
    echo $AA
    AA=` printf "%02d\n" "7" `
    echo $AA
    AA=` printf "%02d\n" "8" `
    echo $AA
    AA=` printf "%02d\n" "9" `
    echo $AA

    J'ai les résultats suivant

    07
    printf: 08 not completely converted
    00
    printf: 09 not completely converted
    00
    10
    07
    08
    09

    Pourquoi le 08 et le 09 ne passent pas ????? alors que tous les autres chiffres passent ???? Est-ce dû à mon Unix ? Qui m'a marabouté lle 8 et le 9 ?
    0
  7. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Je te rassure sous GNU/Linux j'ai exactement le même problème et je ne sais pas pourquoi !?

    j'ai bien essayé toutes les formes de "quotationnage" en tous genres (simple, double, avec, sans, etc.) et rien n'y fait !!!

    Même sans passer par une variable, en ligne de commande pure, ça plante ;-((

    Toutes solutions, pistes ou début d'explication seront les bienvenus.

    Merci.
    0
  8. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    essaie ça
    lami20j@debian:~$ cat ccm.sh
    #!/bin/bash
    AA=` printf "%02.f\n" "07" `
    echo $AA
    AA=` printf "%02.f\n" "08" `
    echo $AA
    AA=` printf "%02.f\n" "09" `
    echo $AA
    AA=` printf "%02.f\n" "10" `
    echo $AA
    AA=` printf "%02.f\n" "7" `
    echo $AA
    AA=` printf "%02.f\n" "8" `
    echo $AA
    AA=` printf "%02.f\n" "9" `
    echo $AA
    
    lami20j@debian:~$ sh ccm.sh
    07
    08
    09
    10
    07
    08
    09


    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Espèce de matheux ;-))

      Merci.
      0
  9. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Quand on écrit 01,02 ... 08,09 les nombres sont interprétés en octal
    en octal 8 = 10 et 9 = 11

    Un nombre en octal ne peux pas contenir que les chiffres jusqu'à 7 compris
    lami20j@debian:~$ printf "%o et %o et %o\n" 0777 777 521
    777 et 1411 et 1011
    lami20j@debian:~$
    

    en revanche quand on écrit 8 et 9 ce sont des nombre décimales donc je peux faire une conversion en octal
    lami20j@debian:~$ printf "%o et %o\n" 8 9
    10 et 11
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Merci bien lami20j ;-))
      0
      1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
         
        de rien :-))
        0
      2. eko > lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention  
         
        j'aurais besoin d'aide j'ai le meme probleme sauf que moi je voudrais le faire avec des nombres en base 16
        merci d'avance
        0