免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3560 | 回复: 10

[文本处理] 请教去重并求和 [复制链接]

论坛徽章:
0
发表于 2016-06-07 11:36 |显示全部楼层
10200 1067
10200 132
10200 1224
10056 22
10056 10
这个是两列 空格分隔  需要左边那列去重之后 求和  显示成

10200 2423 3
10056 32 2

解释如下
10200 2423(1067+132+1224的值) 3(10200的个数)
10056 32(就一个,不需要相加)2(就一个10056)

能用脚本实现,但是这里牛人很多 ,想问一下能不能用正则使用简单的行写出来?

谢谢各位

论坛徽章:
768
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
发表于 2016-06-07 11:39 |显示全部楼层
这个需求具体指?

用正则使用简单的行写出来

论坛徽章:
10
15-16赛季CBA联赛之同曦
日期:2016-06-11 19:22:4115-16赛季CBA联赛之深圳
日期:2020-05-31 16:13:5615-16赛季CBA联赛之同曦
日期:2020-01-28 12:42:47每日论坛发贴之星
日期:2016-08-09 06:20:00程序设计版块每日发帖之星
日期:2016-08-09 06:20:00每日论坛发贴之星
日期:2016-07-12 06:20:00程序设计版块每日发帖之星
日期:2016-07-12 06:20:00程序设计版块每日发帖之星
日期:2016-07-06 06:20:00程序设计版块每日发帖之星
日期:2016-07-04 06:20:0015-16赛季CBA联赛之佛山
日期:2021-02-26 09:33:41
发表于 2016-06-07 12:13 |显示全部楼层
Herowinter 发表于 2016-06-07 11:39
这个需求具体指?

用正则使用简单的行写出来

同没看懂、只会这样
  1. awk '{a[$1]+=$2;b[$1]+=1}END{for(i in a) print i,a[i],b[i]}'
复制代码

论坛徽章:
10
15-16赛季CBA联赛之同曦
日期:2016-06-11 19:22:4115-16赛季CBA联赛之深圳
日期:2020-05-31 16:13:5615-16赛季CBA联赛之同曦
日期:2020-01-28 12:42:47每日论坛发贴之星
日期:2016-08-09 06:20:00程序设计版块每日发帖之星
日期:2016-08-09 06:20:00每日论坛发贴之星
日期:2016-07-12 06:20:00程序设计版块每日发帖之星
日期:2016-07-12 06:20:00程序设计版块每日发帖之星
日期:2016-07-06 06:20:00程序设计版块每日发帖之星
日期:2016-07-04 06:20:0015-16赛季CBA联赛之佛山
日期:2021-02-26 09:33:41
发表于 2016-06-07 12:13 |显示全部楼层
Herowinter 发表于 2016-06-07 11:39
这个需求具体指?

用正则使用简单的行写出来

同没看懂、只会这样
  1. awk '{a[$1]+=$2;b[$1]+=1}END{for(i in a) print i,a[i],b[i]}'
复制代码

论坛徽章:
10
天蝎座
日期:2013-09-22 22:32:23程序设计版块每日发帖之星
日期:2016-08-07 06:20:00lufei
日期:2016-06-17 17:38:40程序设计版块每日发帖之星
日期:2016-06-12 06:20:002016科比退役纪念章
日期:2016-05-31 15:47:20CU十四周年纪念徽章
日期:2016-05-27 12:24:562015年亚洲杯之阿曼
日期:2015-05-03 21:01:352015年辞旧岁徽章
日期:2015-03-03 16:54:15天蝎座
日期:2013-10-20 21:05:24程序设计版块每日发帖之星
日期:2016-08-11 06:20:00
发表于 2016-06-07 12:25 |显示全部楼层
  1. awk '{a[$1]+=$2; b[$1]++}END{for(i in a){print i, a[i], b[i]}}'
复制代码
回复 1# 冰封三万里


   

论坛徽章:
0
发表于 2016-06-07 12:51 |显示全部楼层
回复 3# ll104567

对 就是这样的!!!!

果然太神了  我拿走去研究研究

谢谢


   

论坛徽章:
0
发表于 2016-06-07 12:53 |显示全部楼层
回复 2# Herowinter


    就是像你楼下那样的  打印第一列名称   第一列求和  第一列的个数

    我用shell写了10行左右实现了  因为很有规律  我就琢磨能不能用正则直接匹配出来

     果然可以!

论坛徽章:
0
发表于 2016-06-07 13:00 |显示全部楼层
回复 4# ll104567


    没太看懂  {a[$1]+=$2; b[$1]++}  这部分  能帮忙解释一下么

    十分感谢

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2016-06-07 13:27 |显示全部楼层
  1. perl -00 -pe 's!((\d+)\N+\n)((?:\2\N+\n)*)!$k=$2;$c=$s=0;for(qq($1$3)=~/\d+$/gm){$c++;$s+=$_};qq($k $s $c\n)!ge' f
复制代码
10200 2423 3
10056 32 2

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
发表于 2016-06-07 14:33 |显示全部楼层
回复 9# sunzhiguolu


    Perl代码好他妈销魂啊 大师威武
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP