用bash脚本从另外两个变量的除法中定义一个新变量

用bash脚本从另外两个变量的除法中定义一个新变量,bash,shell,arithmetic-expressions,Bash,Shell,Arithmetic Expressions,我有两个变量,分别是csv数据集中的up_投票和down_投票。我正在尝试创建一个新变量,作为up_投票/总投票的百分比。例如,向上投票=296向下投票=255,我的输出应该是53.7,但我得到了25600。 这是我的方程式 x=$col3 y=$col3+$col4 z=($x/$y)*100 ans=$z 您需要使用外部程序进行计算,因为bash不支持浮点运算 #/bin/bash 投票=“主题1,0,0主题2296255主题3,3,4” 用于投票数据,单位

我有两个变量,分别是csv数据集中的up_投票和down_投票。我正在尝试创建一个新变量,作为up_投票/总投票的百分比。例如,向上投票=296向下投票=255,我的输出应该是53.7,但我得到了25600。 这是我的方程式

    x=$col3
    y=$col3+$col4
    z=($x/$y)*100
    ans=$z

您需要使用外部程序进行计算,因为bash不支持浮点运算

#/bin/bash
投票=“主题1,0,0主题2296255主题3,3,4”
用于投票数据,单位为$选票;做
topic=`echo$vote_data | sed-r的/([^,]*),([^,]*),(.*)/\1/'`
向上投票=`echo$vote_data | sed-r的/([^,]*),([^,]*),(.*)/\2/'`
down_votes=`echo$vote_data | sed-r的/([^,]*),([^,]*),(.*)/\3/'`
#echo“$topic,up:$up\u投票,down:$down\u投票”
总计=`awk“开始{print($up\u voces+$down\u voces)}”`
如果[$总计-等式0];然后
ans=除以零
其他的
ans=`awk“开始{打印100.0*$up\U选票/($up\U选票+$down\U选票)}”`
fi
echo“$topic$ans[$up\u voces/$down\u voces]”
完成
输出:

topic1 divbyzero [ 0 / 0 ]
topic2 53.7205 [ 296 / 255 ]
topic3 42.8571 [ 3 / 4 ]

您发布的代码不足以重现您的问题:;也就是说,25600是256*100,256是无效命令的退出代码,例如
($x/$y)
。无论如何,bash不处理浮点运算,所以您必须使用外部命令,例如
dc
。实际上,我从csv文件中获取这些投票,所以投票不像您的示例中那样是常量。当我尝试使用变量时,它给出了awk:除以零的错误。顺便说一下,我正在尝试将此数据集插入postgresql表中。因此,检查根本没有投票的情况并跳过此类情况我检查了前100行,没有空投票,但第一行返回错误。你确定awk语法吗?我更新了我的答案以检查零以防万一并模拟你的场景。你可以复制粘贴我的代码并运行它来检查它是否有效。是的,我现在检查了,它对我也有效。谢谢