Formatando números no shell com zeros à esquerda

Publicado por Sandro Marcell em 14/03/2009

[ Hits: 24.136 ]

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

Bash: Gráficos estatísticos de tráfego de rede

Man pages coloridas

js-bwm: monitorando seu link de internet em tempo real

nmap - Verificando os IPs em uso na rede

Utilizando abas no Vim

Leitura recomendada

Renomeando arquivos de maiúsculo para minúsculo

Instalando Firefox Quantum no Deepin OS

Script para Ripar um cd inteiro

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

su/sudo em modo visual

  

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