微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux-将bash表达式传递给AWK以进行浮点运算

我试图在bash中执行浮点运算,但是由于不支持浮点运算,因此尝试使用AWK获得解决方案.以下是我面临的问题:

我认为这对我来说很好:

echo - | awk '{printf("%04.4f \n", (-225.2*7+30*6)/17 + (19^2)/9) }'

输出

-42.0301

但是我的动机是“读取一个表达式”并计算正确为4个小数的值,因此请尝试在下面的代码中输入相同的表达式(-225.2 * 7 30 * 6)/ 17(19 ^ 2)/ 9),并给出错误的值(我猜变量是作为字符串传递给awk的):

read inpt 
echo - | awk -v input=$inpt '{printf("%04.4f \n", input) }'

输出

0.0000

注意:请忽略此示例表达式中第二个空格,我可以使用sed或类似方法删除该空格(使用空格时,从bash传递变量时,awk中会出现语法错误).

非常感谢您的帮助.提前致谢

PS:在我的情况下,bash版本是“ bash-4.2”.我猜它的bash版本使我无法使用许多其他选项.

解决方法:

您无法立即使用awk评估变量中的数据.在这种情况下,您需要编写算术计算器或使用预先存在的计算器,例如https://github.com/radare/radare2-bindings/blob/master/awk/calc.awk.修复丢失的括号并正确引用表达式后,您可以:

$echo "((-225.2*7+30*6)/17 + (19^2)/9)" | awk -f calc.awk
((-225.2*7+30*6)/17 + (19^2)/9) =        -42.0301

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐