Como exibir números com um largura fixa de caracteres, complentando com zeros a esquerda

Publicado por Ario S. Assunção em 19/03/2012

[ Hits: 4.160 ]

 


Como exibir números com um largura fixa de caracteres, complentando com zeros a esquerda



Tenho os seguintes números: 1 12 123 1234 12345 123456 e quero que sejam todos exibidos com a mesma largura, completando com zeros a esquerda: 000001 000012 000123 001234 012345 123456.

Tentem assim onde "variável" recebe valores até 6 dígitos completando com zeros a esquerda se precisar.

variavel=1
while [ ${#variavel} -lt 6 ]; do variavel=$(echo 0$variavel); done
echo $variavel


Para alterar a largura desejada, basta trocar o número 6 que é o limite de largura deste exemplo.

Outras dicas deste autor

Padrao Aberto de Documentos - uma grande chance de liberdade - E viva o Linux!

Tirinhas e histórias em quadrinhos pelo Linux

Variável para guardar o nome do Script

Ubuntu 10.04 / Gnome 2.30 - Barra de localização "editável" do Nautilus

Vi Diff - Não é um guia de vi, mas é muito útil

Leitura recomendada

Variáveis compostas em shell script

Endereço IP como variável

Nome de arquivo com espaço dentro de variáveis

Atendimento ou suporte remoto em estações de trabalho via VNC

Script IP Válidos na rede interna

  

Comentários
[1] Comentário enviado por eldermarco em 19/03/2012 - 21:40h

Olá,

Você pode usar o comando printf para fazer isso. Veja esse trecho de código:

---------------------------------------------
for num in 1 12 123 1234 12345 123456; do
printf "%06d\n" $num
done
---------------------------------------------

Saída:
000001
000012
000123
001234
012345
123456


Ele também pode fazer isso com número em ponto flutuante:
------------------------------------------------
for num in 0,1 0,12 0,123 0,1234 0,12345 0,123456; do
printf "%0.6f\n" $num
done
------------------------------------------------

Saída:
0,100000
0,120000
0,123000
0,123400
0,123450
0,123456

Note que eu usei vírgula e não ponto como separador decimal. Isso acontece porque o comando printf leva em conta a localização do usuário. Para usar ponto no lugar de vírgula, defina a variável LANG como sendo en_US.UTF-8 temporariamente.

[2] Comentário enviado por ario em 22/03/2012 - 08:17h

Muito boa a dica do printf, mas originalmente o que me levou a publicar a dica acima foi o tratamento para conseguir o tamanho da variável ${#variavel}, daí eu teria que demonstrar de alguma forma. T

[3] Comentário enviado por ario em 30/01/2018 - 15:24h

Depois de anos desta dica, gostaria de relembrar que o script não trata somente números (inteiros e pontos flutuantes) e sim strings de caracteres. Precisei disso em trabalho onde deveria completar siglas: ABCD _ABC _BCD __AB ___A

variavel=ABC
while [ ${#variavel} -lt 4 ]; do variavel=$(echo _$variavel); done
echo $variável

ou
variavel=ABC
while [ ${#variavel} -lt 4 ]; do variavel=$(echo ${variavel}_); done
echo $variavel



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