Como converter Texto em Numero?

1. Como converter Texto em Numero?

Rafael
Scarpetah

(usa Ubuntu)

Enviado em 07/05/2018 - 04:02h

Tenho um arquivo que realiza coletas e atraves de filtros me retorna um numero
IP_TOTAL=`cat dados/arquivo.txt | cut -d "," -f 7`
IP_USADO=`cat dados/servico | grep -E "VR Total" | tr -s " " " " | cut -d " " -f 3`

resultado=$(($IP_TOTAL - $IP_USADO))

echo "$resultado"

ao imprimir o resultado ele não me traz nada, se eu realizar o filtro

if [[ $IP_TOTAL == [0-9] ]]; then
echo numerico
else
echo nao numerico
fi
ele me retorna não numerico;

tem como realizar a conversão destes dados?

ou alguma forma de eu realizar a operação?



  


2. Re: Como converter Texto em Numero?

Slackjeff
slackjeff

(usa Slackware)

Enviado em 07/05/2018 - 10:15h

Bom a principio o script não apresenta nada errado, porem como não temos acesso ao dado que você está garimpando fica mais dificil, pois nao sabemos o padrão que utiliza.
Utilize o debugger para achar onde você está errando!
Se está usando o bash chame o programa com a opção -x

$ bash -x programa.sh


THE MAGIC SHELL PROGRAMMER.

Slackware user since ~2008
Meu canal no youtube:
https://www.youtube.com/SlackJeff

Meu Site:
http://www.slackjeff.com.br/

Meus Programas estão aqui:
https://notabug.org/jeffersonrocha

Meu PODCAST:
http://podcast.slackjeff.com.br/







3. Re: Como converter Texto em Numero?

Paulo
paulo1205

(usa Ubuntu)

Enviado em 07/05/2018 - 10:42h

Scarpetah escreveu:

Tenho um arquivo que realiza coletas e atraves de filtros me retorna um numero
IP_TOTAL=`cat dados/arquivo.txt | cut -d "," -f 7`
IP_USADO=`cat dados/servico | grep -E "VR Total" | tr -s " " " " | cut -d " " -f 3`

resultado=$(($IP_TOTAL - $IP_USADO))

echo "$resultado"


ao imprimir o resultado ele não me traz nada,


Quando você usa $(( ... )) não precisa expandir explicitamente as variáveis que são parte da expressão. Você poderia ter dito simplesmente o seguinte.
resultado=$((IP_TOTAL-IP_USADO)) 


Agora, se a conta não está produzindo um resultado válido, pode ser que os valores usados na subtração não sejam válidos. Você já os verificou?

se eu realizar o filtro

if [[ $IP_TOTAL == [0-9] ]]; then
echo numerico
else
echo nao numerico
fi

ele me retorna não numerico;


O teste que você faz só aceita números compostos por um único dígito (entre 0 e 9). Se você quiser resultados maiores ou iguais a 10 ou resultados negativos, possivelmente teria de mudar o teste.

tem como realizar a conversão destes dados?


Quais dados? Você não deu sinais claros de que seus dados originais são válidos. Fica complicado dizer qual comportamento eles podem ter.

Mas talvez lhe interesse usar o comando declare para informar que suas variáveis podem receber apenas valores inteiros, de modo que toda atribuição a elas vai se comportar como uma avaliação aritmética. Desse modo, você pode até não ter o valor que você gostaria de ter (especialmente se a extração de dados tiver algum erro), mas o valor da variável garantidamente será numérico.

declare -i var
# A partir de agora, toda vez que você fizer “var=alguma_expressão”, o efeito será equivalente
# a fazer “var=$((alguma_expressão))”.


ou alguma forma de eu realizar a operação?


Qual operação?






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts