免费注册 查看新帖 |

Chinaunix

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

请教一个合并问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-06 19:19 |只看该作者 |倒序浏览
希望得到这里兄弟的帮助。提前谢谢!问题如下
请教问题1:
文件
A 12 34 5 63 58
B 42 36 86 2 23
C 36 98 72 63 3
D 69 32 18 99 66
E 12 34 5 63 58
F 42 36 86 2 23
G 36 98 72 63 3
D 60 32 10 9 23
处理后的文件是:
A 12 34 5 63 58
B 42 36 86 2 23
C 36 98 72 63 3
D 129 64 28 108 89
E 12 34 5 63 58
F 42 36 86 2 23
G 36 98 72 63 3
说明:如果行的第一个字母相同则后面的对应数字相加。

[ 本帖最后由 gzhman 于 2009-9-6 19:21 编辑 ]

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
2 [报告]
发表于 2009-09-06 19:37 |只看该作者

回复 #1 gzhman 的帖子

顺序有什么要求?

论坛徽章:
0
3 [报告]
发表于 2009-09-06 19:50 |只看该作者

回复 #2 blackold 的帖子

他们的对应项相加。行的顺序没有要求。谢谢你的回贴。

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
4 [报告]
发表于 2009-09-06 22:52 |只看该作者
try:
  1. sort urfile|awk '$1!=p{if(p)print pa;p=$1;pa=$0;next}{n=split(pa,a);for(i=2;i<=n;i++)$i+=a[i];pa=$0}END{print pa}'
复制代码

论坛徽章:
0
5 [报告]
发表于 2009-09-07 19:46 |只看该作者

  1. awk '{a[$1]=1;b[$1,1]=$1;for(i=2;i<=NF;i++)b[$1,i]+=$i}END{for(s in a){for(i=1;i<=NF;i++)printf b[s,i] "\t";print ""}}'  数据文件
复制代码

论坛徽章:
0
6 [报告]
发表于 2009-09-07 21:36 |只看该作者
嘿嘿,这个关联数组用起来真牛,刚开始看的时候还以为纳闷awk啥时候有二维数组呢。
程序写一行读起来真累。

[ 本帖最后由 恋家的老鼠 于 2009-9-7 21:44 编辑 ]

论坛徽章:
2
2015年亚洲杯之巴勒斯坦
日期:2015-02-15 12:11:292015年辞旧岁徽章
日期:2015-03-03 16:54:15
7 [报告]
发表于 2009-09-09 11:07 |只看该作者

回复 #5 springwind426 的帖子

春风的回答真绝,不过不是很完美,特别是遇到如下的文本:
A 12 34 5 63 58
B 42 36 86 2 23
C 36 98 72 63 3 10
D 69 32 18 99 66
E 12 34 5 63 58
F 42 36 86 2 23
D 60 32 10 9 23 10 10
G 36 98 72 63 3
将上面的shell修改了一下 :
awk '{
        b[$1]=$1
        for(i=2;i<=NF;i++){
                sum[$1,i]+=$i
        }
        num=num>NF?num:NF
     }
     END{
        for(i in b){
                printf "%-5s ",b;
                for(j=2;j<=num;j++){printf "%-5s ",sum[i,j]}
                print
        }
}'   file

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
8 [报告]
发表于 2009-09-09 11:40 |只看该作者
世间哪有完美?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP