2011-04-07 8 views
7

Tengo un conjunto de registros en el bucle. Los números van desde 0000001 a 0089543 que llamarán UIDX.Cómo incrementar un cero rellenado int en Bash

si intento algo como:

for ((i=0; i< 0089543; i++)); do 
    ((UIDX++)) 
done 

contador incrementa 1, 2, 3, 4 en comparación con el 0000001, 0000002 ... que necesito.

¿Cuál es la mejor manera de rellenar los principales cero?

+1

En cualquier idioma, los números y la visualización de números son problemas separados. '000001' es solo una opción de formateo. – JimB

Respuesta

11

utilizar el comando printf para dar formato a los números con ceros a la izquierda, por ejemplo:

for ((i = 0; i < 99; ++i)); do printf -v num '%07d' $i; echo $num; done 

De man bash:

printf [-v var] formato [argumentos]
Escribir los argumentos formateados a la salida estándar bajo el control del formato. La opción -v hace que la salida se asigne a la variable var en lugar de imprimirse a la salida estándar.

+0

+1, útil, también. – 0xC0000022L

2

Usted podría utilizar el comando ss, muy útil en su situación

seq -w 0089543 

quitar el primer y el último número de acuerdo a su necesidad, por ejemplo, si necesita llegar a 0.089.542 continuación, el comando para su uso es

seq -w 0089542 
+0

+1, gracias. Hasta ahora, siempre he usado la concatenación de cadenas para lograr el efecto. – 0xC0000022L

3

Bash 4 tiene una buena manera de resolver esto:

for i in {0000000..0089543}; do 
    echo $i 
done 
Cuestiones relacionadas