如何比较在bash / awk的两个十进制数?(How to compare two decimal

2019-06-25 20:51发布

我想比较两个小数的值,但我得到的错误。 我用了

if [ "$(echo $result1 '>' $result2 | bc -l)" -eq 1 ];then

由其他堆栈溢出线程建议。

我得到的错误。

什么是去了解这个正确的方法是什么?

Answer 1:

你可以使用bash的数值范围内做到这一点:

if (( $(echo "$result1 > $result2" | bc -l) )); then

bc将输出0或1和(( ))将它们解释为分别伪或真。

使用AWK同样的事情:

if (( $(echo "$result1 $result2" | awk '{print ($1 > $2)}') )); then


Answer 2:

if awk 'BEGIN{exit ARGV[1]>ARGV[2]}' "$z" "$y"
then
  echo z not greater than y
else
  echo z greater than y
fi


Answer 3:

在丹尼斯的答复跟进:

虽然他的回答是小数点正确,庆典抛出(standard_in)1:语法错误与浮点运算。

result1=12
result2=1.27554e-05


if (( $(echo "$result1 > $result2" | bc -l) )); then
    echo "r1 > r2"
else
    echo "r1 < r2"
fi

此方法返回一个警告不正确的输出虽然为0的退出代码。

(standard_in)1:语法错误
R1 <R2

虽然没有明确的解决这个(讨论线程1和线程2 )中,我使用通过四舍五入浮动使用点的结果以下部分修复awk随后使用的bc指令为丹尼斯的答复, 该线程

舍入到所需的小数位:继将获得TB递归目录空间在第二位小数四舍五入。

result2=$(du -s "/home/foo/videos" | tail -n1 | awk '{$1=$1/(1024^3); printf "%.2f", $1;}')

然后,可以使用bash算术如上或使用[[ ]]外壳如在下列螺纹 。

if (( $(echo "$result1 > $result2" | bc -l) )); then
    echo "r1 > r2"
else
    echo "r1 < r2"
fi

或使用-eq算哪里bc的1输出为 ,0是

if [[ $(bc <<< "$result1 < $result2") -eq 1 ]]; then
    echo "r1 < r2"
else
    echo "r1 > r2"
fi


Answer 4:

if [[ `echo "$result1 $result2" | awk '{print ($1 > $2)}'` == 1 ]]; then
  echo "$result1 is greater than $result2"
fi


Answer 5:

您也可以echoif...else语句bc

- echo $result1 '>' $result2
+ echo "if (${result1} > ${result2}) 1 else 0"

(
#export IFS=2  # example why quoting is important
result1="2.3" 
result2="1.7" 
if [ "$(echo $result1 '>' $result2 | bc -l)" -eq 1 ]; then echo yes; else echo no;fi
if [ "$(echo "if (${result1} > ${result2}) 1 else 0" | bc -l)" -eq 1 ];then echo yes; else echo no; fi
if echo $result1 $result2 | awk '{exit !( $1 > $2)}'; then echo yes; else echo no; fi
)


Answer 6:

不能打坏力类型转换? 例如:

($result1 + 0) < ($result2 + 0)


Answer 7:

为什么要使用BC?

for i in $(seq -3 0.5 4) ; do echo $i ; if [[ (( "$i" < 2 )) ]] ; then echo "... is < 2";fi; done

唯一的问题:比较“<”不与负数的工作:他们被视为其绝对值。



文章来源: How to compare two decimal numbers in bash/awk?
标签: bash shell awk