En bash, comment pourrais-je ajouter des entiers avec des zéros et maintenir un tampon spécifié

StackOverflow https://stackoverflow.com/questions/3191067

  •  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.

Était-ce utile?

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)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top