Formatando números no shell com zeros à esquerda

Publicado por Sandro Marcell em 14/03/2009

[ Hits: 24.545 ]

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 abreviações no Vim

sed - Removendo caracteres acentuados

Jogando Tetris via terminal

Tocando CDs de áudio via cdda2wav

Adicionando Extensões em Arquivos

Leitura recomendada

Renomeando em massa sem precisar instalar comandos adicionais

Criar alias no Shell Fish

Excluindo arquivos por data: find + xargs + rm

Habilitando X11 via SSH no Slackware

Sincronizando o relógio da BIOS - SyncTime

  

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