Discussion:
[shell-script] Testar variavel com ponto flutuante
Cristiano Amaral cristianoeinar@gmail.com [shell-script]
2018-06-19 15:16:21 UTC
Permalink
Senhores, qual o melhor método para testar ponto flutuante no shell, estou
usando o bc para isso, existe outra maneira?
itamarnet@yahoo.com.br [shell-script]
2018-06-19 18:59:29 UTC
Permalink
Caro Cristiano

Não sei se existe um método melhor.
Eu prefiro dizer que o melhor é o que se sabe, funciona e na qual você sinta-se a vontade.


Eu recomendaria usar expressões regulares para isso, onde pode usar com test, grep, sed, awk, python e perl.


Basicamente seria uma regex tipo: [+-]?\d+([,.]\d+)?


Em casa programa isso pode ser implementado a sua maneira, mesmo em versões diferentes do mesmo programa se precisar manter a compatibilidade:


Um exemplo com grep seria:
grep '^[+-]\{0,1\}[0-9]\{1,\}\([,.][0-9]\{1,\}\)\{0,1\}$'



Aqui poderia usar echo "numero" | grep ...
ou grep ... <<< "numero"


Isso ajuda?


[]'s
Itamar
Cristiano Amaral cristianoeinar@gmail.com [shell-script]
2018-06-19 19:23:02 UTC
Permalink
Na realidade estou comparando dois numeros reais, para ver qual é maior,
acho que o bc é a melhor solução mesmo...
Post by ***@yahoo.com.br [shell-script]
Caro Cristiano
Não sei se existe um método melhor.
Eu prefiro dizer que o melhor é o que se sabe, funciona e na qual você
sinta-se a vontade.
Eu recomendaria usar expressões regulares para isso, onde pode usar com
test, grep, sed, awk, python e perl.
Basicamente seria uma regex tipo: [+-]?\d+([,.]\d+)?
Em casa programa isso pode ser implementado a sua maneira, mesmo em
grep '^[+-]\{0,1\}[0-9]\{1,\}\([,.][0-9]\{1,\}\)\{0,1\}$'
Aqui poderia usar echo "numero" | grep ...
ou grep ... <<< "numero"
Isso ajuda?
[]'s
Itamar
'Julio C. Neves' julio.neves@gmail.com [shell-script]
2018-06-19 22:51:35 UTC
Permalink
Há muito tempo testei usando o printf para preencher com zeros à direita,
remover as víguals e testar com inteiros. O bc foi beeeem mais rápido.

Abraços,
Julio

*» Não tem tempo para fazer um curso presencial?*
*» Na sua cidade não tem nenhum bom curso de Linux?*
*» O treinamento está muito caro?*
*O melhor de todos em EAD é http://www.dicas-l.com.br/cursos/psl/
<http://www.dicas-l.com.br/cursos/psl/>*

*Damos treinamento em sua empresa **com certificado*
*e nota fiscal **por **um preço, **no mínimo, 50% **abaixo*
*de qualquer curso.*

​​
Nosso time de instrutores *in company* é formado somente por
​
​
autores
​ ​
​
de
*Best Sellers​ ​*​laureados ​sobre os temas.. P. exemplo:

Shell básico e Programação em Shell Julio Neves
Bacula Heitor Medrado
Zabbix Adail Host
Produção Gráfica e Videografismo Cadunico
Post by Cristiano Amaral ***@gmail.com [shell-script]
Na realidade estou comparando dois numeros reais, para ver qual é maior,
acho que o bc é a melhor solução mesmo...
Post by ***@yahoo.com.br [shell-script]
Caro Cristiano
Não sei se existe um método melhor.
Eu prefiro dizer que o melhor é o que se sabe, funciona e na qual você
sinta-se a vontade.
Eu recomendaria usar expressões regulares para isso, onde pode usar com
test, grep, sed, awk, python e perl.
Basicamente seria uma regex tipo: [+-]?\d+([,.]\d+)?
Em casa programa isso pode ser implementado a sua maneira, mesmo em
grep '^[+-]\{0,1\}[0-9]\{1,\}\([,.][0-9]\{1,\}\)\{0,1\}$'
Aqui poderia usar echo "numero" | grep ...
ou grep ... <<< "numero"
Isso ajuda?
[]'s
Itamar
itamarnet@yahoo.com.br [shell-script]
2018-06-21 10:59:43 UTC
Permalink
Caro Cristiano

Se é só para exibir o maior entre dois números pode usar essa estratégia, por exemplo:


$ echo '10.5 11.3' | awk '$1 >= $2 {print $1;exit} ; {print $2}'





Ou esse que pode servir para 2 ou mais números:


$ echo '10.5 12.5 8.7 11.3' | tr ' ' '\n' | sort -nr | head -1





Sem contas, apenas comparação e retorna o número maior.


[]'s
Itamar
itamarnet@yahoo.com.br [shell-script]
2018-06-21 11:06:14 UTC
Permalink
Caro Cristiano

Se é só para exibir o maior entre dois números pode usar essa estratégia, por exemplo:


$ echo '10.5 11.3' | awk '{ print ( $1 >= $2 ? $1 : $2 ) }'





Ou esse que pode servir para 2 ou mais números:


$ echo '10.5 12.5 8.7 11.3' | tr ' ' '\n' | sort -nr | head -1





Sem contas, apenas comparação e retorna o número maior.


[]'s
Itamar
Cristiano Amaral cristianoeinar@gmail.com [shell-script]
2018-06-21 12:38:33 UTC
Permalink
Massa
Post by ***@yahoo.com.br [shell-script]
Caro Cristiano
Se é só para exibir o maior entre dois números pode usar essa estratégia,
$ echo '10.5 11.3' | awk '{ print ( $1 >= $2 ? $1 : $2 ) }'
$ echo '10.5 12.5 8.7 11.3' | tr ' ' '\n' | sort -nr | head -1
Sem contas, apenas comparação e retorna o número maior.
[]'s
Itamar
Tiago Peczenyj tiago.peczenyj@gmail.com [shell-script]
2018-06-19 20:49:27 UTC
Permalink
Ola

Salvo engano, o Bash possui aritmética de inteiros. Portanto fazer
comparações vc vai precisar de um programa externo.

Estou sem condições de ver de o binario test consegue, mas bc não parece
ruim: lembre-se apenad de setar a escala correta uma vez q o bc tem
precisão arbitrária

Veja se o awk não ajuda também. Apesar de achar q o zsh consegue comparar
ponto flutuante
Post by Cristiano Amaral ***@gmail.com [shell-script]
Senhores, qual o melhor método para testar ponto flutuante no shell, estou
usando o bc para isso, existe outra maneira?
--
Tiago B. Peczenyj

http://about.me/peczenyj
Loading...