shell - 如何使用awk计算偏差方程
问题描述
我有一个数学方程,其中我必须使用文件的第一列来计算平均绝对偏差,我被困在尝试使用 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
推荐阅读
- r - 使用 for 循环 (R) 创建表
- android - 使用 huawei-mlkit 将照片与 Perceptual_hashing 进行比较以找到显示同一个人的照片?
- java - 如何将字符串数组转换为可附加列表?
- mysql - 使用 lower() 函数检索 100 个元素的问题
- python - GridSearchCV 中的 Python 错误:“y_true 中仅存在一个类。在这种情况下未定义 ROC AUC 分数。”
- javascript - 使用jQuery DataTables重新排序到另一个位置后如何过滤列?
- json - 如何在深度嵌套的 JSON 中将所有子 ID 与其父 ID 进行比较?
- flutter - 如何以主题 [FLUTTER] 使 AppBar 的标题居中
- amazon-web-services - 雪花外部阶段的加密选项有什么用?
- python - 如何根据python中的两个类别获取列的最后一个值?