【发布时间】:2026-01-29 01:10:02
【问题描述】:
我有问题。我的数据由每行(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
【问题讨论】:
-
目前尚不清楚为什么需要多个数组,因为从问题描述看来,只要进入第 2 行,您就可以放弃第 1 行的所有工作。 ' 甚至不需要任何额外的数组,因为 awk 已经在 $1 .. $NF 中为您提供了这些字段。
-
完全可以使用
for (i = 1; i <= NF; i++) // use $i here对字段进行迭代,而无需创建数组。
标签: awk data-processing