shell - 如何使用awk计算偏差方程

标签 shell awk

我有一个数学方程式,其中我必须使用文件的第一列来计算平均绝对偏差,但我无法尝试使用 awk 来计算它

this is the equation:

其中α对应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/

相关文章:

parsing - 使用 shell 脚本解析 csv 行中的名称值对

python - 从自动化器运行 python 脚本

javascript - 如何在 Node.js 脚本中获取有关 stdout 重定向文件名的信息

linux - 如何将 awk 与多值定界符一起使用

regex - sed 或 awk 查找某行最后 100 个字符中的字符串或删除该行

shell - 根据打开字符串中的输入值对文件进行排序

linux - 即使子进程仍在运行,Bash 等待子进程也可以返回

bash - awk 的 $1 与 shell 脚本中的 $1 冲突

bash - 如何比较 bash/awk 中的两个十进制数?

linux - 使用 Sed 将文本附加到现有的第一行