Formatando números no shell com zeros à esquerda

Publicado por Sandro Marcell em 14/03/2009

[ Hits: 23.103 ]

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

Utilizando abas no Vim

CAT - Descobrindo informações sobre sua distribuição

Overclock em placas de vídeo NVIDIA

Vim: Autocompletar com TAB

Habilitando correção ortográfica no Vim

Leitura recomendada

Instale pacotes pelo apt através de uma lista

Reset Router WAG120N pelo Shell

Execução anônima em xpdf

Comando para listar usuários Samba

Shell Script - Usando vários scripts em um só

  

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