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.
[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
------------------------------------------------
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