用awk处理实验数据
[总点击:1187次]
2009年2月20日
最近做实验整出一堆的实验数据,手工处理的话就太变态了,而用origin(win,这个我用不上)或qtiplot(linux,kde)又要点来点去点得头晕(可能是不熟悉的缘故)。我只是需要计算些很简单的东西,比如标准偏差(这玩意主要用来画图上的误差棒),于是想到了大名鼎鼎的awk同志,简单几句搞定,嘿嘿,awk可不是盖的:
1 2 3 4 5 6 7 8 9 10 11 | #计算一组数据的标准偏差。
BEGIN{print "倒数第一列是标准偏差,倒数第二列是平均值。"}
function sq(x){return x*x}
{
sum=0
tmp=0
for (i=1;i<=NF;i++) sum+=$i
avr=sum/NF
for (i=1;i<=NF;i++) tmp+=sq($i-avr)
print $0,avr,sqrt(tmp/(NF-1))
} |
演示一下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | xiooli(~/共享)>> cat haha.txt 0.6437 0.5912 0.5639 0.7375 0.6796 0.8372 0.7750 0.7403 0.8372 0.8188 0.8177 0.8605 1 1 1 0.8500 0.8895 0.8837 0.8812 0.8453 0.8372 0.4187 0.4254 0.4593 0.5407 0.4939 0.6860 0.8163 0.7849 0.8571 0.6047 0.6653 0.9244 1.000 0.9720 0.9012 0.8900 0.9398 1 1 0.9210 0.9942 0.9796 1 xiooli(~/共享)<< awk -f /home/xiooli/.scripts/err.awk haha.txt 倒数第一列是标准偏差,倒数第二列是平均值。 0.6437 0.5912 0.5639 0.5996 0.0405577 0.7375 0.6796 0.8372 0.751433 0.0797185 0.7750 0.7403 0.8372 0.784167 0.0490961 0.8188 0.8177 0.8605 0.832333 0.0243992 1 1 1 1 0 0.8500 0.8895 0.8837 0.8744 0.0213291 0.8812 0.8453 0.8372 0.854567 0.023418 0.4187 0.4254 0.4593 0.434467 0.0217656 0.5407 0.4939 0.5173 0.0330926 0.6860 0.8163 0.75115 0.092136 0.7849 0.8571 0.821 0.0510531 0.6047 0.6653 0.635 0.0428507 0.9244 1.000 0.9720 0.965467 0.0382211 0.9012 0.8900 0.9398 0.910333 0.0261261 1 1 0.9210 0.973667 0.0456107 0.9942 0.9796 1 0.991267 0.0105116 |
呵呵,没有验算,不知道对不对,想来问题不大。处理后直接调用gnuplot去画图就好了,从此生活轻松多了,哈哈^^
你可以试试grace,一个GUI的plot数据的软件, 还可以做简单的运算,拟合曲线等等. 在理科里,处理数据上很流行的。 就是有些像latex, 开始的时候, 要花些时间。 源里有, 但貌似有问题。
http://plasma-gate.weizmann.ac.il/Grace/