3ks*_*stc 2 bash shell-script arithmetic floating-point
我试图找出我从两个文件中获取的两个数字之间的差异。我认为我的代码会有意义:
我试图通过两种不同的方法使其工作,但没有奏效。我得到的输出是零 (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}'
Run Code Online (Sandbox Code Playgroud)
最终我将使用差异来设置电子邮件更新的间隔。
文件里面的值分别是511.786(新)和509.768(旧),我从终端得到的错误如下:
line 40: 511.786-509.765: syntax error: invalid arithmetic operator (error token is ".786-509.765")
Run Code Online (Sandbox Code Playgroud)
jim*_*mij 10
第一个例子的问题是它bash
只能对整数进行操作,而你的第二次尝试awk
是不正确的。
我建议bc
用于这项工作:
bc <<< "$new-$old"
Run Code Online (Sandbox Code Playgroud)
<<<
在这里被称为字符串,它基本上是较短的形式echo "$new-$old" | bc
。
awk
如果您愿意,您还可以修改您的命令:
echo "$new $old" | awk '{print $1-$2}'
Run Code Online (Sandbox Code Playgroud)
或(如上使用此处的字符串):
awk '{print $1-$2}' <<< "$new $old"
Run Code Online (Sandbox Code Playgroud)