¿Cómo rellenar con ceros una secuencia de números enteros en bash para que todos tengan el mismo ancho?
Necesito repetir algunos valores,
for i in $(seq $first $last)
do
does something here
done
Para $first
y $last
, necesito que tenga una longitud fija de 5. Entonces, si la entrada es 1
, necesito agregar ceros delante para que se convierta en 00001
. Se repite hasta 99999
, por ejemplo, pero la longitud debe ser 5.
Por ejemplo: 00002
, 00042
, 00212
, 12312
etc.
¿Alguna idea de cómo puedo hacer eso?
En su caso específico, sin embargo, probablemente sea más fácil usar la -f
bandera para seq
que formatee los números a medida que genera la lista. Por ejemplo:
for i in $(seq -f "%05g" 10 15)
do
echo $i
done
producirá el siguiente resultado:
00010
00011
00012
00013
00014
00015
De manera más general, bash
tiene printf
una función incorporada para que pueda rellenar la salida con ceros de la siguiente manera:
$ i=99
$ printf "%05d\n" $i
00099
Puede usar la -v
bandera para almacenar la salida en otra variable:
$ i=99
$ printf -v j "%05d" $i
$ echo $j
00099
Tenga en cuenta que printf
admite un formato ligeramente diferente, por seq
lo que debe utilizarlo %05d
en lugar de %05g
.
Aún más fácil puedes hacerlo
for i in {00001..99999}; do
echo $i
done
Si el final de la secuencia tiene una longitud máxima de relleno (por ejemplo, si desea 5 dígitos y el comando es seq 1 10000
), puede usar -w
el indicador para la secuencia: agrega relleno por sí mismo.
seq -w 1 10
produciría
01
02
03
04
05
06
07
08
09
10