微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

bash:从数据集计算RMSD

如何解决bash:从数据集计算RMSD

我有一个包含 240 行的 my_file.xvg,其中的数字按以下格式排列:

    5.4
    5.1
    5.2
    5.4
    5.4
    4.9
    5.0
    5.2
....
    4.9

我已经使用 awk 计算了这些数据的平均值并将其存储为 bash 脚本中的“平均值”变量:

mean=$(awk '{sum+=$1}END{printf "%.1f",sum/NR}' my_file.xvg)

我如何计算这些数字的 RMSD(例如确定平均值的误差)并将其存储为另一个变量?

解决方法

无需运行两次awk脚本,一次即可计算统计数据

$ read -r mean std < <(awk '{s+=$1;ss+=$1^2} END{printf "%.2f %.2f",m=s/NR,sqrt(ss/NR-m^2)}' file)

$ echo $mean $std
5.20 0.18
,

一旦将均值保存在变量中,就可以对 RMSD 使用非常相似的方法。由于您似乎更喜欢 awk,请参阅以下内容:

rmsd=$(awk -v mean=$mean '{++n;sum+=($NF-mean)^2} END{if(n) print sqrt(sum/n)}' my_file.xvg)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。