我想计算两个负浮点数之间的差,然后检查结果是否低于某个阈值。数字存储在 中file.dat
,因为此计算将进行多次,因此计算必须依赖于直接从文件获取值,而无需手动格式化。看起来file.dat
像这样。
-.63354975E+03 -.63354982E+03
现在,由于 bash 无法处理浮点数,我尝试了bc
以下方式:
paste -sd- file.dat | bc >> file.dat
该paste
命令将输入转换为
-.63354975E+03--.63354982E+03
bc
应该减去它们,但是我收到错误消息(standard_in) 1: syntax error
。我可以用来sed
将一个数字更改为正数,然后将它们相加,但是有没有办法直接使用 来做到这一点bc
?
当我使用时会出现不同的问题paste -sd+ file.dat | bc >> file.dat
。这应该将数字相加,但是结果却与4.932900412
预期相差甚远1267.09957
。当我输入带有格式化数字的计算时,-633.54975+-633.54982
我得到了预期的结果。所以它似乎bc
没有正确处理带有指数的数字。有办法解决这个问题吗?
答案1
awk
解决方案:
awk 'NR==1{a=$0};NR==2{b=$0};END{print (a)-(b)}' file.dat