Zero-Padding en Bash

Hoy me he encontrado con el problema de tener que generar una secuencia de números desde un terminal con bash. A todos los números de dicha secuencia debían estar formados por tres caracteres con lo que debía añadir ceros de relleno a la izquierda del número.



Buscando un poco me he encontrado con esta interesante entrada donde explica como usar el comando printf basándose en el uso que el autor le da a la función en C.

http://jonathanwagner.net/2007/04/zero-padding-in-bash/

A modo de resumen, para generar la secuencia he utilizado el siguiente bucle:

for i in {1..10}; do printf “%03d\n” $i; done
001
002
003
004
005
006
007
008
009
010


De esta forma me he podido descargar los 100 ficheros secuenciales que me interesaban de una forma rápida y cómoda.

for i in {1..100}; do seq=`printf “%03d\n” $i`; wget $url1$seq$url2; done

Nota: parece que desde la versión 4.1.5 de bash se puede simplificar de la siguiente manera:
$ for i in {01..10}; do echo $i; done
01
02
03
04
05
06
07
08
09
10

Las últimas versiones de las diferentes distribuciones de GNU/Linux ya vienen con una versión de bash superior, con lo que la segunda opción será mas óptima. En sistemas antiguos o con otras shells se podría utilizar la opción con el printf.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s