![如何用 BASH 减去从另外 2 个文件中提取的 2 个浮点数](https://linux22.com/image/61083/%E5%A6%82%E4%BD%95%E7%94%A8%20BASH%20%E5%87%8F%E5%8E%BB%E4%BB%8E%E5%8F%A6%E5%A4%96%202%20%E4%B8%AA%E6%96%87%E4%BB%B6%E4%B8%AD%E6%8F%90%E5%8F%96%E7%9A%84%202%20%E4%B8%AA%E6%B5%AE%E7%82%B9%E6%95%B0%20.png)
我试图找出从两个文件中获取的两个数字之间的差异。我认为我的代码是有意义的:
我尝试用两种不同的方法让它工作,但没有成功。我得到的输出为零 (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}'
最终我将使用差异来设置电子邮件更新的间隔。
文件内的值是 511.786(新)和 509.768(旧),我从终端得到的错误如下:
line 40: 511.786-509.765: syntax error: invalid arithmetic operator (error token is ".786-509.765")
答案1
第一个示例的问题是bash
只能对整数进行操作,而您的第二次尝试awk
根本不正确。
我建议用于bc
这项工作:
bc <<< "$new-$old"
<<<
就是所谓的这里的字符串,并且它基本上是较短的形式echo "$new-$old" | bc
。
awk
如果您愿意,您还可以修改命令:
echo "$new $old" | awk '{print $1-$2}'
或(使用这里的字符串如上):
awk '{print $1-$2}' <<< "$new $old"