LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 873|回复: 2

如何在Shell下实现这样的数值统计计算?

[复制链接]
发表于 2006-5-30 12:05:55 | 显示全部楼层 |阅读模式
原始数据格式如下,有很多个SECTION,共n个;
表中每个SECTION都有两列,(X,Y)可以看成各个点的坐标,每个点自成一行.
现在要对各个点在所有SECTION中的坐标作统计平均.
另外,每个SECTION之间都由点的个数(现等于9)和"SECTION"标记隔开.


  1. ---------------------------------------------
  2.      X         Y
  3. ---------------------------------------------
  4. ....
  5. SECTION: 1             #<-这是第k行,从这里开始读取#
  6. 1.848619   1.582796    #<-想把它俩分别装入数组XA[1]和YA[1],并在每个SECTION中累加
  7. 20.17222   20.90597    #<-想把它俩分别装入数组XA[2]和YA[2],并在每个SECTION中累加
  8. 300.1233   300.8589    #<-想把它俩分别装入数组XA[3]和YA[3],并在每个SECTION中累加
  9. 0.081323   0.962245    #<-想把它俩分别装入数组XA[4]和YA[4],并在每个SECTION中累加
  10. -10.0806   10.46079    #<-想把它俩分别装入数组XA[5]和YA[5],并在每个SECTION中累加
  11. 20.15859   20.55888    #<-想把它俩分别装入数组XA[6]和YA[6],并在每个SECTION中累加
  12. 30.04000   30.39677    #<-想把它俩分别装入数组XA[7]和YA[7],并在每个SECTION中累加
  13. -40.2340   40.84182    #<-想把它俩分别装入数组XA[8]和YA[8],并在每个SECTION中累加
  14. -50.0834   50.96503    #<-想把它俩分别装入数组XA[9]和YA[9],并在每个SECTION中累加
  15. 9                      #<-表示总共有9个点
  16. SECTION: 2              
  17. 1.039361   1.083161   
  18. 2.062854   2.139038
  19. -3.00659   3.216112
  20. 0.243749   0.543359
  21. 10.03200   10.73950
  22. 20.44733   20.76969
  23. 30.41897   30.42323
  24. 40.04939   40.24543
  25. 50.28102   50.28565
  26. 9
  27. SECTION: 3
  28. 1.501221   -1.17865
  29. 2.591375   2.032659
  30. 3.547986   -3.01310
  31. 0.623798   0.667415
  32. 10.50620   10.50388
  33. 20.43490   20.72506
  34. 30.80939   30.81383
  35. 40.63154   40.05711
  36. 50.42599   50.92859
  37.   9
  38. SECTION: 4
  39. .... ........ ......
  40. .... ........ ......
  41.   9
  42. SECTION: n
  43. .... ........ ......
  44. .... ........ ......
  45. ------------------------------------------
复制代码


只晓得用sed可以控制处理哪些行,但现在似乎对行号也要设一个变量进行计数,而且还要同时进行循环累加,就不晓得该怎么处理了?

哪位大侠可否给个方子?

many 3ks!
发表于 2006-5-30 12:18:20 | 显示全部楼层
这种问题用C多方便呢?
ps:我也不知道怎么用shell来实现:-(
回复 支持 反对

使用道具 举报

发表于 2006-5-30 14:37:41 | 显示全部楼层
利用awk实现:
awk -f f.awk YourFile,其中f.awk内容为:
  1. BEGIN {
  2.     sumx=0.0
  3.     sumy=0.0
  4. }
  5. {
  6. if ( $1 ~ "SECTION:" ) {
  7.     sec=$2
  8.     p=1
  9.     sumx=0.0
  10.     sumy=0.0
  11.     } else if ( NF == 2 ) {
  12.         sumx=sumx + $1
  13.         sumy=sumy + $2
  14.     } else if ( NF == 1 && p == 1 ) {
  15.         print "SECTION",sec,": ", sumx/$1 , sumy/$1
  16.     }
  17. }
复制代码

这里#<-及其后面的内容删除掉才成
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表