免费注册 查看新帖 |

Chinaunix

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

请教:关于合并行,并根据某列求和 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-12 20:12 |只看该作者 |倒序浏览
样本数据如下:

  1. rrdtool update ddr_21.rrd 1175585154:18
  2. rrdtool update ddr_21.rrd 1175585155:16
  3. rrdtool update ddr_21.rrd 1175585155:17
  4. rrdtool update ddr_21.rrd 1175585157:18
  5. rrdtool update ddr_21.rrd 1175585158:17
  6. rrdtool update ddr_21.rrd 1175585169:92
  7. rrdtool update ddr_21.rrd 1175585186:94
  8. rrdtool update ddr_21.rrd 1175585199:95
  9. rrdtool update ddr_21.rrd 1175585206:11
  10. rrdtool update ddr_21.rrd 1175585208:17
  11. rrdtool update ddr_21.rrd 1175585212:18
  12. rrdtool update ddr_21.rrd 1175585212:19
  13. rrdtool update ddr_21.rrd 1175585214:12
  14. rrdtool update ddr_21.rrd 1175585216:60
  15. rrdtool update ddr_21.rrd 1175585225:92
  16. rrdtool update ddr_21.rrd 1175585229:84
  17. rrdtool update ddr_21.rrd 1175585253:15
  18. rrdtool update ddr_21.rrd 1175585269:83
  19. rrdtool update ddr_21.rrd 1175585275:55
复制代码


我目前遇到的问题是,当发现两条记录的时间戳,也就是类似(1175585155)一样的时候
将时间戳一样数值加在一起,比如样本数据里
rrdtool update ddr_21.rrd 1175585155:16
rrdtool update ddr_21.rrd 1175585155:17

合并成
rrdtool update ddr_21.rrd 1175585155:33

我尝试了很长时间,感到无从下手,请大家帮忙看一下,多谢了。。。

论坛徽章:
0
2 [报告]
发表于 2007-04-12 23:32 |只看该作者
比较麻烦

  1. cat file|awk -F ':' '{i[NR]=$1;j[NR]=$2;for (a=1;a<NR;a++) {if (i[a] == i[NR]) {i[NR]="null";j[a]+=j[NR]}}}END{for (b=1;b<=FNR;b++) {if (i[b]!="null") print i[b]":"j[b]}}'
复制代码

[ 本帖最后由 happychl 于 2007-4-12 23:39 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2007-04-13 08:58 |只看该作者
  1. awk -F'[ :]' '{

  2.     key = $(NF-1);
  3.     sum[key] += $NF;
  4.     $NF = "";

  5.     if (!buf[key]) buf[key] = $0;
  6. } END {

  7.     for (key in buf) print buf[key] ":" sum[key];
  8. }' urfile
复制代码

论坛徽章:
0
4 [报告]
发表于 2007-04-13 09:05 |只看该作者
$NF = ""; 可以替换为 NF--;
不知道是否通用

论坛徽章:
0
5 [报告]
发表于 2007-04-13 12:38 |只看该作者

回复 1楼 errmood 的帖子

awk -F: '{ary[$1]+=$2}END{for(i in ary)print i":"ary[i]}'

论坛徽章:
0
6 [报告]
发表于 2007-04-13 13:19 |只看该作者
我那绕弯子啦,还是楼上的简单 ^_^

论坛徽章:
0
7 [报告]
发表于 2007-04-13 16:06 |只看该作者
awk -F":" '
{
  if (NR==1)
     {line=$1;count=$2}
  else
     {if (line!=$1)
        {print line":"count;line=$1;count=$2}
      else
        {count=count+$2}
     }
}
END{print line":"count}' a > b
班门弄斧一下呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP