【问题标题】:Shell script for variance percentage calculation用于计算方差百分比的 Shell 脚本
【发布时间】:2015-10-09 22:30:00
【问题描述】:


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

谢谢

【问题讨论】:

  • 您的脚本有什么问题?这不是数学问题解决服务。
  • Value1=3947 Value2=5853,我正在使用 echo "$Value1" "$Value2" | awk '{print ($1-$2)/$1*100}',我想知道它的正确方法与否..?如果它的方法是正确的,那么请你帮我如何获得绝对值。
  • 关于 awk 中不存在的 abs 函数,请参阅 this question 和相关答案

标签: bash


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-02
    • 2020-11-27
    • 2020-12-25
    • 1970-01-01
    • 2018-12-27
    • 2021-06-17
    • 2021-01-05
    相关资源
    最近更新 更多