Chinaunix

标题: 我想合并前面相同的列,并把最后一列的值相加 [打印本页]

作者: hxletter    时间: 2013-10-17 21:39
标题: 我想合并前面相同的列,并把最后一列的值相加
本帖最后由 hxletter 于 2013-10-17 21:43 编辑

例如我有如下文件:
  1. a b c :3
  2. b c d :2
  3. a b c :1
  4. b c d :3
复制代码
我想得到:
  1. a b c :4
  2. b c d :5
复制代码

作者: liion631818    时间: 2013-10-17 22:29

估计这样的帖子都烂了,大家都没兴趣回答

  1. awk -F":" '!/^$/{a[$1]+=$2}END{for(i in a)print i":"a[i]}'
复制代码

作者: yaozhibing41001    时间: 2013-10-17 23:02
回复 1# hxletter
  1. [root@localhost ~]# awk -vFS=":" '{a[$1]+=$2}END{for(i in a){print i":"a[i]}}' a
  2. b c d :5
  3. a b c :4
复制代码

作者: WilliBhamlll    时间: 2013-10-17 23:27
  1. awk '{sub(":","");t=$NF;NF--;a[$0]+=t;}END{for(i in a)print i" :"a[i]}' file
复制代码

作者: rubyish    时间: 2013-10-18 06:16
学 习 了 !
作者: yestreenstars    时间: 2013-10-18 09:01
本帖最后由 yestreenstars 于 2013-10-18 09:03 编辑
  1. [root@localhost ~]# cat i
  2. a b c :3
  3. b c d :2
  4. a b c :1
  5. b c d :3
  6. [root@localhost ~]# awk -F: '{a[$1]+=$2}END{for(i in a)print i":"a[i]}' i
  7. b c d :5
  8. a b c :4
  9. [root@localhost ~]# awk -F: '{if(!a[$1]++)b[++n]=$1;c[$1]+=$2}END{for(i=1;i<=n;i++)print b[i]":"c[b[i]]}' i
  10. a b c :4
  11. b c d :5
  12. [root@localhost ~]#
复制代码

作者: bikong0411    时间: 2013-10-18 09:29
awk -F':' '{a[$1]+=$2;}END{for(i in a){print i FS a[i]}}' urfile




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2