免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4812 | 回复: 11
打印 上一主题 下一主题

求高手帮忙:用awk 的array计算数据 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-09-28 06:26 |只看该作者 |倒序浏览
谢谢各位先。

有两组从aix 的nmon 提取出来的数据,用于计算进程使用物理cpu的值。因为数据比较多,单纯地用shell好像速度太慢。
1) LPAR_INFO.log (这组数据有8640条记录,这是一天的记录)
TIMESTAMP     PHYSICAL_CPU
T0002 0.419
T0003 0.209
T0004 0.418
T0008 0.239
T0009 0.175
T0010 0.441
T0011 0.242
T0012 0.177
T8625 0.153
T8626 0.265
T8627 0.173
T8628 0.418
T8629 0.265

2) PROCESS_INFO.log (这组数据有24万条记录,这里只截取小部分)
PID         TIMESTAMP     CUP_USAGE%    (这里的TIMESTAMP与LPAR_INFO.log中的TIMESTAMP是一致的,关联的)
1585340 T0002 2.80
0598114 T0002 1.32
1777686 T0002 0.93
1884270 T0002 0.88
1114308 T0002 0.40
0983058 T0002 0.33
0503842 T0002 0.28
1351726 T0002 0.27
1003536 T0002 0.27
0123062 T0003 0.76
0598114 T0003 0.45
0512244 T0003 0.39
1585340 T0003 0.30
0983058 T0003 0.28
1884270 T0003 0.28
1118284 T8625 0.23
1118284 T8626 0.23
1118284 T8627 0.23
0503842 T8628 0.25
1585340 T8629 0.23

3) 实现目标:
每个PID 的 CUP_USAGE% * PHYSICAL_CPU 的总和   (条件是:  LPAR_INFO.log的TIMESTAMP =  PROCESS_INFO.log 的TIMESTAMP)

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
2 [报告]
发表于 2011-09-28 08:41 |只看该作者
先看看这个,可能不是100%符合,但只要做些小的调整即可。
  1. awk 'NR==FNR{a[$1]=$2;next} {print $1,$2,$3,a[$2]*$3}' LPAR_INFO.log PROCESS_INFO.log
  2. PID TIMESTAMP CUP_USAGE% 0
  3. 1585340 T0002 2.80 1.1732
  4. 0598114 T0002 1.32 0.55308
  5. 1777686 T0002 0.93 0.38967
  6. 1884270 T0002 0.88 0.36872
  7. 1114308 T0002 0.40 0.1676
  8. 0983058 T0002 0.33 0.13827
  9. 0503842 T0002 0.28 0.11732
  10. 1351726 T0002 0.27 0.11313
  11. 1003536 T0002 0.27 0.11313
  12. 0123062 T0003 0.76 0.15884
  13. 0598114 T0003 0.45 0.09405
  14. 0512244 T0003 0.39 0.08151
  15. 1585340 T0003 0.30 0.0627
  16. 0983058 T0003 0.28 0.05852
  17. 1884270 T0003 0.28 0.05852
  18. 1118284 T8625 0.23 0.03519
  19. 1118284 T8626 0.23 0.06095
  20. 1118284 T8627 0.23 0.03979
  21. 0503842 T8628 0.25 0.1045
  22. 1585340 T8629 0.23 0.06095
复制代码

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
3 [报告]
发表于 2011-09-28 08:53 |只看该作者

  1. awk '
  2. NR==FNR{pcpu[$1]=$2}
  3. NR>FNR{if(a!=$1){print a,sum[a];a=$1}
  4. sum[$1]+=pcpu[$2]*$3}
  5. END{print a,sum[a]}' LPAR_INFO.log <(sort -k1,1 PROCESS_INFO.log)
复制代码
没测试

论坛徽章:
0
4 [报告]
发表于 2011-09-28 10:47 |只看该作者
先谢谢楼上的各位,明天到单位的机器上试一试,然后告诉结果。

论坛徽章:
0
5 [报告]
发表于 2011-09-28 21:48 |只看该作者
本帖最后由 fzhcl 于 2011-09-28 23:35 编辑

回复 3# waker


Hi Waker,
END{print a,sum[a]}' LPAR_INFO.log <(sort -k1,1 PROCESS_INFO.log) -----system complains there is an error.

Still can't figure out how it works

论坛徽章:
0
6 [报告]
发表于 2011-09-28 23:32 |只看该作者
回复 2# rdcwayx


    It works very well,   runs only 20 seconds. But need to make some change to meet my expectation. Thanks    rdcwayx

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
7 [报告]
发表于 2011-09-29 08:07 |只看该作者
回复 5# fzhcl


用bash/ksh93试试

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
8 [报告]
发表于 2011-09-29 08:50 |只看该作者
回复  rdcwayx


    It works very well,   runs only 20 seconds. But need to make some change to  ...
fzhcl 发表于 2011-09-28 23:32



贴出部分你想要的结果,这样的话我们可以知道你的需求。

论坛徽章:
0
9 [报告]
发表于 2011-09-29 08:53 |只看该作者
回复 7# waker


    当把sort -k1,1 PROCESS_INFO.log生成另外的文件时作为输入时,可以工作。

论坛徽章:
0
10 [报告]
发表于 2011-09-29 09:04 |只看该作者
本帖最后由 fzhcl 于 2011-09-29 09:05 编辑

Hi rdcwayx
首先谢谢你这么早上班就来解答我的问题。

1)    在你给我的另外一个帖子回复中提到用  awk '!a[$1]++{print $1}' lpar_info.log 产生唯一值。现在的问题是如何根据pid的唯一值计算出每一个PID 一天用CPU的总量。
2)    在 awk 'NR==FNR{a[$1]=$2;next} {print $1,$2,$3,a[$2]*$3}' LPAR_INFO.log PROCESS_INFO.log 这个命令中,不知道a[$2]是如何得到的?
对awk实在是不熟悉, 今天在单位8个小时找资料理解你的命令,但还是不能全部理解。 谢谢解释。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP