用于方差百分比计算的Shell脚本

时间:2015-10-09 07:39:22

标签: bash


 我需要计算2个数字之间的差异百分比差异,有些人可以帮助我在unix shell脚本中如何做。此外,我喜欢将输出作为abs值(总是+ ve)。

由于

1 个答案:

答案 0 :(得分:1)

使用 pure

的伪浮点数

几年前我写了这篇文章:

# 
# Bash source file for percent computing
#
# (C) 2011-2012 Felix Hauri - felix@f-hauri.ch
# Licensed under terms of LGPL v3. www.gnu.org

# after sourcing script:
# syntaxe: percent <amount> <total> [varname]

percent() {
    local p=000$((${1}00000/$2))
    printf ${3+-v} $3 "%.2f%%" ${p:0:${#p}-3}.${p:${#p}-3}
}

export -f percent

这可以这样使用:

percent 10 50
20.00%

或设置变量:

percent 10 50 result
echo $result
20.00%

Pseudo abs() 使用错误的负值

percent() {
    local p=000$((${1#-}00000/$2));
    printf ${3+-v} $3 "%.2f%%" ${p:0:${#p}-3}.${p:${#p}-3};
}

这将删除你的第一个参数中的任何minux标志:

value1=3947
value2=5853
percent $((value1-value2)) $value1 result
echo $result
48.29%

或者更精确:

percent() {
    local p;
    printf -v p 00000%u $((${1#-}0000000/$2));
    printf ${3+-v} $3 "%.4f%%" ${p:0:${#p}-5}.${p:${#p}-5};
}

可以计算:

value1=3947
value2=5853
percent $((value1-value2)) $value1 result
echo $result
48.2898%

当然,因为这使用bash的64位整数,所以只能使用小值:第一个参数不能大于922337203685