我需要计算2个数字之间的差异百分比差异,有些人可以帮助我在unix shell脚本中如何做。此外,我喜欢将输出作为abs值(总是+ ve)。
由于
答案 0 :(得分:1)
几年前我写了这篇文章:
#
# 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%
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
!