Par exemple, je veux compter de 001 à 100. Cela signifie que la mémoire tampon zéro commencerait par 2, 1, puis éventuellement 0 quand il atteindra 100 ou plus.
ex:
Je pourrais le faire si les nombres avaient un nombre prédéfini de zéros avec printf "% 02d" $ i. Mais c'est statique et non dynamique et ne fonctionnerait pas dans mon exemple.
Si vous voulez dire statique ou dynamique, vous voudriez pouvoir utiliser une variable pour la largeur, vous pouvez le faire:
$ padtowidth=3
$ for i in 0 {8..11} {98..101}; do printf "%0*d\n" $padtowidth $i; done
000
008
009
010
011
098
099
100
101
L'astérisque est remplacé par la valeur de la variable à laquelle il correspond dans la liste des arguments ($padtowidth
dans ce cas).
Sinon, la seule raison pour laquelle votre exemple ne fonctionne pas est que vous utilisez "2" (peut-être comme s'il s'agissait du remplissage maximum à appliquer) alors qu'il devrait être "3" (comme dans mon exemple) puisque cette valeur correspond au total résultant. width (pas la largeur du pad uniquement).
Si votre système en est équipé, essayez seq
avec l'option -w
(--equal-width
):
$ seq -s, -w 1 10
01,02,03,04,05,06,07,08,09,10
$ for i in `seq -w 95 105` ; do echo -n " $i" ; done
095 096 097 098 099 100 101 102 103 104 105
Dans Bash version 4 (utilisez bash -version), vous pouvez utiliser brace expansion . Mettre un 0
avant l'une ou l'autre limite oblige les nombres à être complétés par des zéros
echo {01..100} # 001 002 003 ...
echo {03..100..3} # 003 006 009 ...
#!/bin/bash
max=100;
for ((i=1;i<=$max;i++)); do
printf "%0*d\n" ${#max} $i
done
Le code ci-dessus complétera automatiquement vos nombres avec le nombre correct de 0 en fonction du nombre de chiffres contenus dans la valeur max/terminal. Tout ce que vous avez à faire est de changer la variable max
et le reste sera traité.
Exemples:
01
02
03
04
05
06
07
08
09
10
001
002
003
004
005
006
...
097
098
099
100
0001
0002
0003
0004
0005
0006
...
0997
0998
0999
1000
# jot is available on FreeBSD, Mac OS X, ...
jot -s " " -w '%03d' 5
jot -s " " -w '%03d' 10
jot -s " " -w '%03d' 50
jot -s " " -w '%03d' 100
Si vous devez utiliser des valeurs allant jusqu'à un nombre variable avec un remplissage variable:
$values_count=514;
$padding_width=5;
for i in 0 `seq 1 $(($values_count - 1))`; do printf "%0*d\n" $padding_width $i; done;
Ce serait imprimer 00000, 00001, ... 00513 . (Je n'ai trouvé aucune des réponses actuelles répondant à mes besoins)