How to zero pad a sequence of integers in bash so that all have the same width?
Easier still you can just do
for i in {00001..99999}; do
echo $i
done
use printf with "%05d" e.g.
printf "%05d" 1
In your specific case though it's probably easiest to use the -f
flag to seq
to get it to format the numbers as it outputs the list. For example:
for i in $(seq -f "%05g" 10 15)
do
echo $i
done
will produce the following output:
00010
00011
00012
00013
00014
00015
More generally, bash
has printf
as a built-in so you can pad output with zeroes as follows:
$ i=99
$ printf "%05d\n" $i
00099
You can use the -v
flag to store the output in another variable:
$ i=99
$ printf -v j "%05d" $i
$ echo $j
00099
Notice that printf
supports a slightly different format to seq
so you need to use %05d
instead of %05g
.
If the end of sequence has maximal length of padding (for example, if you want 5 digits and command is seq 1 10000
), than you can use -w
flag for seq - it adds padding itself.
seq -w 1 10
would produce
01
02
03
04
05
06
07
08
09
10