En bash, comment pourrais-je ajouter des entiers avec des zéros et maintenir un tampon spécifié
-
02-10-2019 - |
Question
Par exemple, je veux compter de 001 à 100. Signification du tampon zéro commencerait avec 2, 1, 0 puis finalement quand il atteint 100.
ex: 001 002 ... 010 011 ... 098 099 100
Je pourrais le faire si les chiffres avaient un nombre prédéfini de zéros avec printf « % 02d » $ i. Mais c'est statique et non dynamique et ne travaillerait dans mon exemple.
La solution
Si par statiques ou dynamiques vous dire que vous souhaitez pouvoir utiliser une variable pour la largeur, vous pouvez faire ceci:
$ 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 elle correspond à la liste d'arguments ($padtowidth
dans ce cas).
Dans le cas contraire, la seule raison pour laquelle votre exemple ne fonctionne pas est que vous utilisez « 2 » (peut-être comme si elle était le rembourrage maximum à appliquer) quand il devrait être « 3 » (comme dans mon exemple), puisque cette valeur est la largeur totale résultante (pas seulement le tampon-largeur).
Autres conseils
Si votre système a, 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 la version 4 Bash (utilisation -version bash) vous pouvez utiliser le développement des accolades . Mettre un 0
avant soit les forces de limiter le nombre à capitonné 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-pad automatique vos numéros avec le nombre correct de 0 est basé sur le nombre de chiffres de la valeur max / terminal contient. Tout ce que vous devez faire est de changer la variable max
et il se chargera du reste.
Exemples:
max = 10
01
02
03
04
05
06
07
08
09
10
max = 100
001
002
003
004
005
006
...
097
098
099
100
max = 1000
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 avez besoin de pad valeurs jusqu'à un nombre variable avec rembourrage 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;
Ceci imprimer 00000, 00001, ... 00513. (Je ne trouve pas les réponses actuelles répondant à mes besoins)