Problemas com aritmética flutuante no bash

2

Eu tenho código no bash:

a=$(cat "tempf.out")

Onde tempf.out é assim:

-432.4319347412

Eu quero multiplicá-lo por 2, então escrevo:

result=$(expr $a*2)

Mas eu entendo isso:

*232.4319347412

Se eu tentar usar bc:

result=$(expr $a*2|bc)

Eu recebo:

(standard_in) 1: illegal character: ^M

Por favor, ajude a corrigir isso.

    
por danielleontiev 01.07.2016 / 19:36

2 respostas

2

Se o seu arquivo tempf.out tiver finais de linha no estilo DOS (CR-LF), será necessário corrigir isso - no nível do arquivo usando dos2unix , tr ou sed , por exemplo,

a=$(sed 's/\r$//' tempf.out)
bc <<< "$a*2"

ou removendo-o da variável $a usando os recursos de substituição de parâmetros do shell, por exemplo,

a=$(<tempf.out)
bc <<< "${a%^M}*2"

em que ^M é um retorno de carro real composto usando Ctrl + V Ctrl + M

    
por steeldriver 01.07.2016 / 19:46
-1

Muito obrigado a todos

a=$(sed 's/\r$//' tempf.out)
result=$(expr $a*2 | bc)    
echo $result

funciona para mim

    
por danielleontiev 01.07.2016 / 19:56