是否有一些技巧可以让人们使用bc(或其他一些标准实用程序)返回任意数量数字的标准差?为了方便起见,假设数字以以下方式存储在Bash变量中:

myNumbers="0.556
1.456
45.111
7.812
5.001"

因此,我正在寻找的答案将采用以下形式:
standardDeviation="$(echo "${myNumbers}" | <insert magic here>)"

最佳答案

使用awk:

standardDeviation=$(
    echo "$myNumbers" |
        awk '{sum+=$1; sumsq+=$1*$1}END{print sqrt(sumsq/NR - (sum/NR)**2)}'
)
echo $standardDeviation

使用perl:
#!/usr/bin/env perl

use strict; use warnings;
use Math::NumberCruncher;

my @data = qw/
    0.556
    1.456
    45.111
    7.812
    5.001
/;

print Math::NumberCruncher::StandardDeviation(\@data);

输出
16.7631

10-02 14:17