我在比较unix
中的大浮动变量时遇到了问题代码: 错误消息:第1行电传打字机上的语法错误 我从论坛的一篇旧帖子中了解到这是因为 "脚本试图通过将表达式回显到bc来进行计算。但其中一个变量有一个非法数字"
以下是给出错误的脚本
代码:
#! /bin/bash -xv
a=`cat abc.csv | sed '1d' | tr -s ' ' | cut -d, -f3`
echo $a
-180582621617.24
b=`sed '1d' def.csv | cut -d',' -f7 | awk '{s+=$1}END{ printf("%.2f\n",s)}'`
echo $b
-180582621617.37
Result=`echo "if($a !=$b) 1" | bc `
if [ $Result -eq 1 ]; then
echo "both values not equal"
else
echo " both values equal"
fi
但我能够在硬编码时对它进行比较
代码:
a=`echo "-180582621617.24,222.555,333.333" | awk -F"," '{print $1}'`
b=`echo "-180582621617.24,222.555,333.333" | awk -F"," '{print $1}'`
Result=`echo "if($a !=$b) 1" | bc `
if [ $Result -eq 1 ]; then
echo "both values not equal"
else
echo " both values equal"
fi
答案 0 :(得分:1)
bc
中的测试如果为真,则返回1
,如果为假,则返回任何内容。
$Result
将是未定义的或数字的(1
)。 test
-eq
仅适用于两个数字操作数。只需为else
案例
Result=`echo "if($a !=$b) 1 else 0" | bc `
if [ $Result -eq 1 ] ; then
echo "both values not equal"
else
echo " both values equal"
fi
答案 1 :(得分:0)
使用bc
处理shell中的浮点数:
$ bc <<< '-180582621617.24 == -180582621617.37'
0
$ bc <<< '-180582621617.24 != -180582621617.37'
1
在您的情况下,它将是bc <<< "$a != $b"
,例如:
[[ bc <<< "$a != $b" ]] && Result=1 || Result=0
答案 2 :(得分:0)
感谢所有建议。
我能够通过创建两个临时文件并使用diff -w
命令进行比较。
#! /bin/bash -xv
rm -f triger_cksum.txt data_cksum.txt
a=`cat ab.csv | sed '1d' | tr -s ' ' | cut -d, -f3`
echo $a > triger_cksum.txt
b=`sed '1d' cd.csv | cut -d',' -f61 | awk '{s+=$1}END{ printf("%.6f\n",s)}'`
echo $b > data_cksum.txt
diff_files=`diff -w triger_cksum.txt data_cksum.txt | wc -l | tr -s ' '`
if [ $diff_files -eq 0 ]
then
echo "cksum equal"
else
echo "cksum not equal"
fi