如何解决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 举报,一经查实,本站将立刻删除。