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.671 ]

 


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

Tirinhas e histórias em quadrinhos pelo Linux

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

Exibir arquivo de grupos /etc/group de forma personalizada conforme o usuário

Variável para guardar o nome do Script

basename - Inserindo ponto separador de milhar em expressão numérica

Leitura recomendada

Qual o maior número da variável RANDOM?

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

Site com várias dicas de ajuda para shell script

Variável de numero inteiro ou float

DictConv: Converta dicionários do Babylon para o StarDict

  

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

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts