计算 awk 中每一行的标准差

Compute standard deviationfor each row in awk

我有问题。我的数据由每行 500 个字段(500 列)组成,我也有 5000 行。我想计算每行的标准偏差作为输出 输入示例

3  0  2  ...(496 another values)...   1
4  1  0  ...(496 another values)...   4
1  3  0  ...(496 another values)...   2

预期输出

0.571 (std for values from the first row)
0.186 (std values from the second row)
0.612 (std values from the third row)

我找到了类似的东西,但它不适合我的情况(他们为每一列计算标准差)。 Compute average and standard deviation with awk

我考虑计算每一行的总和以检查平均值,然后对于每个字段 std[i] += ($i - sum[i])^2,最后 sqrt(std[i] /(500-1)),但我必须为每一行创建数组(5000 个数组)。

也许我应该将行更改为列,将列更改为行?

编辑:

是的,这太棒了

#!/bin/bash
awk 'function std1() { 
    s=0; t=0;
    for( i=1; i<=NF; i++)
        s += $i;
    mean = s / NF; 
    for (i=1; i<=NF; i++ )
        t += (mean-$i)*(mean-$i);
    return sqrt(t / s)
    }
    { print std1()}' data.txt >> std.txt

我不保证计算结果,但你可以这样做:

awk 'function sigma(   s,   t) { 
    for( i=1; i<=NF; i++)
        s += $i;
    mean = s / NF; 
    for (i=1; i<=NF; i++ )
        t += (mean-$i)*(mean-$i);
    return sqrt(t / NF)
    }
    { print sigma()}' input-path