与 bc 计算负浮点数之差

与 bc 计算负浮点数之差

我想计算两个负浮点数之间的差,然后检查结果是否低于某个阈值。数字存储在 中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

相关内容