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

 


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

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

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

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

LibreOffice colando duplicado (Ctrl+c Ctrl-v duplicado)

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

Leitura recomendada

Exportar variáveis de um script no mesmo sub-shell

Como lidar com variáveis retornadas pelo Expect - removendo CR do fim de linha

Concatene com o Bash e fique contente!

Endereço IP como variável

Somar variáveis nos shells BASH e sh

  

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