Como pode subtrair 2 flutuantes que foram extraídos de 2 outros arquivos com BASH [duplicado]

1

Estou tentando obter a diferença entre dois números que tirei de dois arquivos. Acho que meu código fará sentido:

Eu tentei fazer isso funcionar por dois métodos diferentes, não funcionou. O que recebo como saída é zero (0).

#method 1
difference_btwn_eng_hrs_MX3_122=$(($(sed -n '1p' engine_hours_new_MX3_122.txt)-$(sed -n '1p' engine_hours_old_MX3_122.txt)))
echo "$difference_btwn_eng_hrs_MX3_122"

#method 2
new=$(sed -n '1p' engine_hours_new_MX3_122.txt)
old=$(sed -n '1p' engine_hours_old_MX3_122.txt)
echo "$new $old" | awk '{print $new - $old}'

Por fim, usarei a diferença para definir intervalos para atualizações por e-mail.

Os valores dentro dos arquivos são 511.786 (novo) e 509.768 (antigo), e o erro que recebo do terminal é o seguinte:

line 40: 511.786-509.765: syntax error: invalid arithmetic operator (error token is ".786-509.765")
    
por 3kstc 12.02.2015 / 02:28

1 resposta

7

O problema com o primeiro exemplo é que bash pode operar somente em inteiros e sua segunda tentativa com awk simplesmente não está correta.

Eu proponho usar bc para este trabalho:

bc <<< "$new-$old"

<<< é assim chamado aqui string , e é basicamente a forma mais curta echo "$new-$old" | bc .

Você também pode modificar seu comando awk se quiser:

echo "$new $old" | awk '{print $1-$2}'

ou (usando aqui string como acima):

awk '{print $1-$2}' <<< "$new $old"
    
por 12.02.2015 / 02:33