如何获得两个数字的绝对差异?

时间:2014-12-12 04:05:13

标签: python bash shell awk

是否有任何bash / shell命令可以获得两个数字的绝对差异?例如.-

-10 and -5 is 5-10 and 10 is 207 and 21 is 14&的绝对差异100 and -11 is 111

还是找到它的任何工作单位?请帮忙。

4 个答案:

答案 0 :(得分:3)

这是一个简单的:

echo $(($1-$2)) | sed 's/-//'
./script.sh -10 -5

输出

5

逻辑非常简单。您可以为脚本提供参数$1$2 ./script.sh -10 -5然后使用$1 - $2输出echo的结果。 sed  如果出现则会删除-

答案 1 :(得分:2)

您可以使用$((...))语法直接在shell中执行简单的整数运算。

function abs_diff {
    local diff
    diff=$(($1 - $2));
    if [ $diff -lt 0 ]
    then
        diff=$((-$diff))
    fi
    echo $diff
}

使用三元?运算符可以将其简洁地编写为单个表达式。

function abs_diff {
    echo $(($1 >= $2 ? $1 - $2 : $2 - $1))
}

然后只需使用

abs_diff -10 -5

代码。

更新: “如果你能解释一下这个逻辑会很棒。” - 我们去......

基本思想是我们编写一个Bash函数,它将两个整数作为参数并返回它们的绝对差值。

可以使用FUNCTION_NAME [ARG...]语法像外部程序一样调用Bash函数。在函数内部,我们可以通过$1$2来引用它的参数,就像我们在任何函数之外引用shell脚本的参数一样。要从函数“返回”值,我们将其打印到标准输出。 (不要滥用return语句。它旨在报告成功或失败,而不是业务数据。)如果我们想要将函数调用的结果分配给变量,我们可以使用VAR=$(COMMAND [ARG...])语法。函数定义的语法为function FUNCTION_NAME { FUNCTION_BODY }。如果我们声明应该是函数本地的变量,我们可以使用local关键字。这是一个Bash功能。

现在让我们看看我们如何计算差异的绝对值。我们只有整数运算,所以我们怎么做呢?显然,如果我们从整数 m 中减去整数 n ,则只有两种可能的结果:非负或负结果。在第一种情况下,我们完成了。在第二个方面,我们需要做的就是消极。

第一个功能正是如此。

function abs_diff {           # Define the function 'abs_diff'
    local diff                # with 'diff' as a local variable
    diff=$(($1 - $2));        # to compute the difference of its first two arguments
    if [ $diff -lt 0 ]        # and if it is negative
    then                      # then
        diff=$((-$diff))      # negate the result
    fi                        # and
    echo $diff                # finally print the result.
}

第二个版本更简洁。如果你知道三元?运算符,例如C或Java,那么它就不足为奇了。这行是什么

echo $(($1 >= $2 ? $1 - $2 : $2 - $1))

表示:如果$1 >= $2评估为真,则打印$1 - $2,否则$2 - $1,以确保结果始终为非负数。

如果你的需要是一次性的,定义一个函数对你来说似乎有些过分,只需将第二个函数的主体复制到需要它的地方就可能是一个可行的选择。

答案 2 :(得分:1)

您可以使用-c parameter从命令行执行Python命令。所以,你可以使用它,就像这样

python -c "import sys; print(abs(int(sys.argv[1]) - int(sys.argv[2])))" 100 -11
# 111

此脚本从命令行获取两个参数,将它们转换为整数,从第一个值中减去第二个值并打印结果的绝对值

答案 3 :(得分:1)

这个bash实现怎么样:

export A=5
export B=10
echo "$A-$B" | bc | tr -d -

输出:

5