Formatando números no shell com zeros à esquerda

Publicado por Sandro Marcell em 14/03/2009

[ Hits: 23.942 ]

Blog: http://sanmarcell.wordpress.com

 


Formatando números no shell com zeros à esquerda



Uma dica simples, mas que talvez possa vir a ser útil. Para formatar números no shell, adicionando zeros à esquerda, você pode tentar uma das seguintes formas:

1 - Utilizando o seq:

seq -f "%0<VALOR>g" INÍCIO FIM

Onde <VALOR> é um número inteiro positivo!

Ex.:

seq -f "%05g" 1 10

Produzirá:

00001
00002
...
00010

2 - Utilizando o printf:

printf "%0<VALOR>d\n" {INÍCIO..FIM}

Obs.: A construção '{INÍCIO..FIM}' só é válida no Zsh, Ksh e Bash.

Ex.:

printf "%05d\n" {1..10}

Produzirá a mesma saída do exemplo anterior.

3 - Já se você usa o Ksh ou Zsh, também é possível utilizar o comando built-in 'typeset':

typeset -Z <VALOR> variável=valor

Ex.:

typeset -Z 3 i=0
$ for i in {1..100} ; do print $i ; done

001
002
...
100

P.S.: Também é possível utilizar o built-in 'print' com a opção '-f'.

print -f "%03d\n" {1..100}

Para deixar as coisas ainda mais fáceis de se entender, aqui vai um exemplo prático para esse tipo de aplicação:

#!/bin/sh
#
# Renomeando arquivos dum diretório de forma padronizada.
#
# Uso: script /path/arquivos/*


novo_nome=meu_arquivo
contador=1

for i in $@
do
   zeros=`printf "%03d\n" $contador`
   mv -v "$i" "${novo_nome}$zeros"
   contador=`expr $contador + 1`
done

Mais detalhes você encontrará nas "man pages".

Falou!!! =)

Outras dicas deste autor

rm - remover vários arquivos excetuando alguns

Utilizando abreviações no Vim

Ordenando strings em shell script

Jogando Tetris via terminal

Shell - operações envolvendo números em ponto flutuante

Leitura recomendada

Atualização dos Menus do Wine

Como passar parâmetros para um alias no Bash

Copiar uma página do MAN para texto simples sem os ^H^_

MyIP - Facilitador para obter endereço IP externo

Reparar - Recuperação de sistemas baseados em Debian

  

Comentários
[1] Comentário enviado por staltux em 04/07/2009 - 00:06h

uhu legal isso...
ates eu ficava fazendo isso usando variaveis x,y,z e incrementando uma por uma no loop while
tipo $x$y$z
se $z for igual a 9, zera $z e add 1 a variavel $y...e por ai vai...nossa quebrou mo galhao aqui




Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts