我有一个数学方程式,其中我必须使用文件的第一列来计算平均绝对偏差,但我无法尝试使用 awk 来计算它
其中α
对应test.2
文件第一列的值(如下图),n
为文件的行数(不包括第一行)。
文件看起来像这样
79
1 4.4278 2.2139 2.1869 3.0000 0.0000 0.0000 0.0000
2 6.9588 3.4794 2.9968 5.0000 0.0000 0.0000 0.0000
3 6.5200 3.7258 2.8564 2.0000 1.0000 0.0000 0.0000
4 6.4927 3.7101 2.8477 2.5000 1.0000 0.0000 0.0000
5 6.2338 3.5621 2.7648 2.5000 1.0000 0.0000 0.0000
6 6.1514 3.5150 2.7384 2.5000 1.0000 0.0000 0.0000
7 6.5048 3.7171 2.8515 2.5000 1.0000 0.0000 0.0000
8 6.6012 3.7722 2.8824 2.5000 1.0000 0.0000 0.0000
随着值的增加,直到它达到 79 行。第一个值是我尝试使用的行数 n
n = awk ‘NR == 1 {print $1}’ test.2
但我不知道如何从 test.2 文件中计算所有的 α
,然后计算总和。
到目前为止我唯一测试过的是
for i in $(seq 1 "${n}"); do
i=$((i+1))
a=awk 'NR == $i {print $2}' test.2
x=$(awk -F'[-,]' '({print sqrt((a[{$i}]-2a[${i}+1]+a[${i}+2])ˆ2)}')
stdev=$x/(n-2)
done
echo "$stdev"
最佳答案
大致应该是这样的,不过需要自己测试改正
awk '
NR == 1 { n = $1 }
NR > 1 {
a[0] = a[1];
a[1] = a[2];
a[2] = $2;
if (NR > 3) {
row_value = ( a[0] - 2 * a[1] + a[2] )
if (row_value < 0) {
row_value = - row_value
}
sum += row_value
}
}
END { print sum / (n - 2) }' test.2
关于shell - 如何使用awk计算偏差方程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64464569/