Formater un nombre avec des 0 en shell Unix

Résolu/Fermé
tbeghain Messages postés 58 Date d'inscription mercredi 31 mars 2004 Statut Membre Dernière intervention 22 février 2021 - 27 sept. 2007 à 15:08
 eko - 21 avril 2009 à 13:49
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

8 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
27 sept. 2007 à 15:27
Salut,
[tmpfs]$ for i in $(seq 10); do printf "%02d\n" "$i"; done
01
02
03
04
05
06
07
08
09
10
;-))
2
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
27 sept. 2007 à 15:30
Ça ce n’est plus de la synchronisation
C’est au niveau supérieur, de la télépathie par exemple ;-))
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894 > lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019
27 sept. 2007 à 15:58
C'est clair ;-))

Mais il y a du avoir des interférences, j'ai pas bien perçu le "20" ;-DDDDD
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
27 sept. 2007 à 15:27
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
Gotrune Messages postés 55 Date d'inscription mardi 5 décembre 2006 Statut Membre Dernière intervention 8 novembre 2008 3
27 sept. 2007 à 15:20
tu peut essayer un code du type:
'0'&$1
0
tbeghain Messages postés 58 Date d'inscription mercredi 31 mars 2004 Statut Membre Dernière intervention 22 février 2021 3
27 sept. 2007 à 15:37
Merci beaucoup, le printf fait très exactement ce que je voulais
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tbeghain Messages postés 58 Date d'inscription mercredi 31 mars 2004 Statut Membre Dernière intervention 22 février 2021 3
27 sept. 2007 à 17:36
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
27 sept. 2007 à 19:24
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
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
27 sept. 2007 à 20:02
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
27 sept. 2007 à 20:07
Espèce de matheux ;-))

Merci.
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
27 sept. 2007 à 20:12
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
27 sept. 2007 à 20:27
Merci bien lami20j ;-))
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567 > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
27 sept. 2007 à 20:30
de rien :-))
0
eko > lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019
21 avril 2009 à 13:49
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