Função em shell script que recebe números e retorna com zeros a esquerda. [RESOLVIDO]

1. Função em shell script que recebe números e retorna com zeros a esquerda. [RESOLVIDO]

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 11/04/2012 - 18:52h

Preciso fazer uma função em shell script que receba um grupo de números e me retorne os mesmos só que com zeros a esquerda de acordo com o tamanho desejado, ex:

Grupo de números:

343
467
3
2344
42
32
21


Resultado deve ser:


00343
00467
00003
02344
00042
00032
00021


Ao passar os números para a função preciso também dizer o tamanho de preenchimento com zeros.


function _strzero()
{
# Recebe:
# -------
# par1 - qualquer número
# par2 - Tamanho total de casas
# -----------------------------
# Transformar 1 em 00001 ou 001
# -----------------------------
}


Enquanto isso vou batendo lata tentando achar a solução. Se alguém tem a resposta manda bala.




  


2. Re: Função em shell script que recebe números e retorna com zeros a esquerda. [RESOLVIDO]

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 11/04/2012 - 19:01h

Quando for imprimir na tela, transforma em string.


3. Re: Função em shell script que recebe números e retorna com zeros a esquerda. [RESOLVIDO]

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 11/04/2012 - 19:09h

rei_astro escreveu:

Quando for imprimir na tela, transforma em string.


Tanto para a tela quanto para enviar ao banco preciso que os dados estejam formatados com zeros a esquerda. Atualizando sistema legado de dados que já está armazenado assim. ;)






4. Re: Função em shell script que recebe números e retorna com zeros a esquerda. [RESOLVIDO]

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 11/04/2012 - 19:13h

Minha variável:

meu_numero="341"

echo ${#meu_numero}
retorna tamanho 3

Sei que o parâmetro para o tamanho é 5.
Se total é 5 e tenho 3, preciso completar com 2 (dois) 0 (zeros) a esquerda.

Qual a melhor forma ?

Por agora estou me recusando a fazer um for para ir completando. Deve ter um jeito mais fácil. Se ninguém encontrar uma saída mais limpa vai ser na POG dinovo kkkk




5. Re: Função em shell script que recebe números e retorna com zeros a esquerda. [RESOLVIDO]

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 11/04/2012 - 19:49h

A resposta encontrada no próprio VOL: http://www.vivaolinux.com.br/dica/Formatando-numeros-no-shell-com-zeros-a-esquerda




6. Re: Função em shell script que recebe números e retorna com zeros a esquerda. [RESOLVIDO]

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 11/04/2012 - 20:16h

A quem possa interessar.


#!/bin/bash
# file: strzero.sh
# ---------------------------------------------------#

function _strzero()
{

local meu_numero tamanho_total meu_strzero

# ---------------------------------------------------#
# param1 = Valor numérico informado.
# param2 = Quantidade total de casas em seu numerador inteiro.
# ---------------------------------------------------#
if ! [ "$1" -a "$2" ]; then
echo "Envie: 1º parâmetro o valor. No 2º a quantidade de casas. Bye"
exit
fi
meu_numero="$1"
tamanho_total="$2"
meu_strzero=$(printf "%0${tamanho_total}d\n" $meu_numero)
echo $meu_strzero
# ---------------------------------------------------#
# Retorno: Número formatado com zeros a esquerda. ex: 13 5 volta com 00013
# ---------------------------------------------------#
}

# Para executar é obrigatório enviar 2 parâmetros.
_strzero $1 $2


Genérica para você usar dentro de seus aplicativos.

Uso: $ ./strzero.sh 13 5
Resultado: 00013


Ainda pendente: http://vivaolinux.com.br/topico/Shell-Script/Tem-como-evitar-carregar-2-vezes-o-mesmo-source#9

Pra Ser Sincero- Engenheiros do Hawaii




7. Re: Função em shell script que recebe números e retorna com zeros a esquerda. [RESOLVIDO]

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 19/04/2012 - 23:45h

Alguma alma caridosa pode testar a função ?

A maledeta funciona para todos menos para o número 08, vejam.


_strzero 05 03 -> retorna 005
_strzero 06 03 -> retorna 006
_strzero 07 03 -> retorna 007
_strzero 08 03 -> retorna BUG: linha 139: printf: 08: número octal inválido 000

Será que é só na minha máquina ? Por favor confirmem. Salvar a função do post anterior para o teste.

DETALHE. Se eu testo o 8 sem o zero a esquerda funciona :(

_strzero 8 03 -> retorna 008 {Vai entender}

Como retirar o ZERO a esquerda de uma variável ?
mynhavar="08" Ela está chegando com 08 e preciso passar para 008 ou 00008


Se não encontrar outra saída vou usar a dica do @.ronin
http://www.vivaolinux.com.br/script/Tratamento-de-zeros-a-esquerda









8. Re: Função em shell script que recebe números e retorna com zeros a esquerda. [RESOLVIDO]

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 20/04/2012 - 00:12h

Achei uma gambi usando sed

meunumero="0000000000000000000000308"
echo $meunumero | sed 's/0*0//'
$ 308


meunumero="08"
echo $meunumero | sed 's/0*0//'
$ 8

meunumero="8"
echo $meunumero | sed 's/0*0//'
$ 8

Já volto com a versão final da função.




9. Re: Função em shell script que recebe números e retorna com zeros a esquerda. [RESOLVIDO]

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 20/04/2012 - 00:22h

Versão completa:



function _strzero()
{

local lc_numero lc_tamanho_final lc_strzero

# ------------------------------------------------------------------------#
# param1 = Valor numérico informado.
# param2 = Quantidade total de casas em seu numerador inteiro.
# ------------------------------------------------------------------------#

if ! [ "$1" -a "$2" -o "$1" ]; then
echo "Envie: 1º parâmetro o valor. No 2º a quantidade de casas. Bye"
exit
fi

lc_numero=$(echo "$1" | sed 's/0*//')
lc_tamanho_final="$2"

lc_strzero=$(printf "%0${lc_tamanho_final}d\n" $lc_numero)

echo $lc_strzero 2>/dev/null
# ------------------------------------------------------------------------#
# Retorno: Número formatado com zeros a esquerda. ex: 13 5 volta com 00013
# ------------------------------------------------------------------------#
}


Versão simplificada:



function _strzero()
{
# $1 = Seu número. $2 = Quantas casas, ex: 13 5 retorna 00013
lc_numero=$(echo "$1" | sed 's/0*//')
lc_strzero=$(printf "%0${2}d\n" $lc_numero)
echo $lc_strzero 2>/dev/null
}



Agora funcionando.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts