Formatando números no shell com zeros à esquerda

Publicado por Sandro Marcell em 14/03/2009

[ Hits: 14.982 ]

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

jQuery + PHP = Monitor de status

PHP + jQuery - Monitorando link de internet em tempo real

Copiando arquivos com caracteres especiais

Squid - Limitando números de conexões simultâneas

CGI + Shell Script: gerando listagem de IPs disponíveis em sua rede

Leitura recomendada

Sed para formatar endereços MAC

Baixando arquivos grandes demais para a sua conexão.

su/sudo em modo visual

Problemas de tabulação no VI

Exibindo mensagens ao efetuar login

  

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
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts