免费注册 查看新帖 |

Chinaunix

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

请教思路:如何输出文件中含相同元素的行 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-06-15 21:58 |只看该作者 |倒序浏览
本帖最后由 wand65 于 2016-06-16 02:57 编辑

请教,目前有一个文本如下:
abc                1         I2879-I2883        10                0.0000120850
abc                1         I2883-I2889        10                0.0000150940
abc                1         I2869-I2879        10                0.000029480
abc                1         I2889-I2896        10                0.000081145
abc                1         I3173-I3177        10                0.000098300
abc                1         I7613-I7615        10                0.000102170
abc                1         I1530-I1532        10                0.000103376
abc                2         I2879-I2883        10                0.0000120850
abc                2         I2883-I2889        10                0.0000150940
abc                2         I2869-I2879        10                0.000029480
abc                2         I2889-I2896        10                0.000081145
abc                2         I3173-I3177        10                0.000098300
abc                2         I7613-I7615        10                0.000102170
abc                2         I1530-I1532        10                0.000103376
abc                3         I2879-I2883        10                0.0000120850
abc                3         I2883-I2889        10                0.0000150940
abc                3         I2869-I2879        10                0.000029480
abc                3         I2889-I2896        10                0.000081145
abc                3         I3173-I3177        10                0.000098300
abc                3         I7613-I7615        10                0.000102170
abc                3         I1530-I1532        10                0.000103376
需要输出的如下:重复的段数(比如例子中的为7,表示7个1,7个2,7个3)
对列表中的第三列中重复的项目进行输出如下(其实对于相同列,起后面的带小数的值是不一样的):
abc                1         I2879-I2883        10                0.000012085
abc                2         I2879-I2883        10                0.000012085
abc                3         I2879-I2883        10                0.000012085
abc                1         I2883-I2889        10                0.000015094
abc                2         I2883-I2889        10                0.000015094
abc                3         I2883-I2889        10                0.000015094
.
.
.


文件中大约有两万行 ,行的内容如上,文件大小1.2M。
我的思路如下:
1.对第二列中的数字1进行统计,计算出段数,同时把第三列中1后面的放到一个数组
2.把文件读入一个数组,数组中的每一行去匹配上面数组的每一个元素,输出匹配成功的项目
3.第二列的每个块(1,2,3)中值得顺序是不一样的
但发现这样效率好低(要拿两万行的数据和几千行的数据去套两个foreach),大概要12s才能完成

请教高效的思路或代码

论坛徽章:
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
2 [报告]
发表于 2016-06-15 23:20 |只看该作者
本帖最后由 sunzhiguolu 于 2016-06-15 23:33 编辑

对于上面的文本, 你期望的完整的输出结果是? 第一列, 第四列的内容是固定值吗? 另外, 将限制条件说详细点.
abc                1         I2879-I2883        10                0.0000120850

论坛徽章:
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
3 [报告]
发表于 2016-06-15 23:29 |只看该作者
如果不涉及隐私的话, 将数据传上来试下...

论坛徽章:
6
15-16赛季CBA联赛之新疆
日期:2016-03-22 22:34:5915-16赛季CBA联赛之山东
日期:2016-04-11 09:08:41程序设计版块每日发帖之星
日期:2016-06-28 06:20:00程序设计版块每日发帖之星
日期:2016-07-19 06:20:00每日论坛发贴之星
日期:2016-07-19 06:20:0015-16赛季CBA联赛之青岛
日期:2016-07-20 22:44:17
4 [报告]
发表于 2016-06-16 00:11 |只看该作者
可以理解为对2,3列排序吗?

论坛徽章:
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
5 [报告]
发表于 2016-06-16 00:11 |只看该作者
对于你给出的文本, 这样的结果?
abc 1 I2879-I2883 10 0.0000120850
abc 2 I2879-I2883 10 0.0000120850
abc 3 I2879-I2883 10 0.0000120850
abc 1 I2883-I2889 10 0.0000150940
abc 2 I2883-I2889 10 0.0000150940
abc 3 I2883-I2889 10 0.0000150940
abc 1 I2869-I2879 10 0.000029480
abc 2 I2869-I2879 10 0.000029480
abc 3 I2869-I2879 10 0.000029480
abc 1 I2889-I2896 10 0.000081145
abc 2 I2889-I2896 10 0.000081145
abc 3 I2889-I2896 10 0.000081145
abc 1 I3173-I3177 10 0.000098300
abc 2 I3173-I3177 10 0.000098300
abc 3 I3173-I3177 10 0.000098300
abc 1 I7613-I7615 10 0.000102170
abc 2 I7613-I7615 10 0.000102170
abc 3 I7613-I7615 10 0.000102170
abc 1 I1530-I1532 10 0.000103376
abc 2 I1530-I1532 10 0.000103376
abc 3 I1530-I1532 10 0.000103376

论坛徽章:
0
6 [报告]
发表于 2016-06-16 02:50 |只看该作者
回复 5# sunzhiguolu
是的


   

论坛徽章:
0
7 [报告]
发表于 2016-06-16 02:51 |只看该作者
回复 4# RE_HASH
不是排序,是把相同行输出到一起,
不过先排序到是个好思路


   

论坛徽章:
0
8 [报告]
发表于 2016-06-16 02:54 |只看该作者
回复 2# sunzhiguolu
你在五楼的结果正确的,第一列,四列的数值是完全相同的,基本上只用考虑2,3,5列即可


   

论坛徽章:
0
9 [报告]
发表于 2016-06-16 03:00 |只看该作者
不好意思大家,之前的结果描述有误,已经更正

论坛徽章:
6
15-16赛季CBA联赛之新疆
日期:2016-03-22 22:34:5915-16赛季CBA联赛之山东
日期:2016-04-11 09:08:41程序设计版块每日发帖之星
日期:2016-06-28 06:20:00程序设计版块每日发帖之星
日期:2016-07-19 06:20:00每日论坛发贴之星
日期:2016-07-19 06:20:0015-16赛季CBA联赛之青岛
日期:2016-07-20 22:44:17
10 [报告]
发表于 2016-06-16 06:12 |只看该作者
回复 8# wand65

那不就是排序吗?

    $>  cat aa |sort -k3,3 -k2,2
abc     1       I1530-I1532     10      0.000103376
abc     2       I1530-I1532     10      0.000103376
abc     3       I1530-I1532     10      0.000103376
abc     1       I2869-I2879     10      0.000029480
abc     2       I2869-I2879     10      0.000029480
abc     3       I2869-I2879     10      0.000029480
abc     1       I2879-I2883     10      0.0000120850
abc     2       I2879-I2883     10      0.0000120850
abc     3       I2879-I2883     10      0.0000120850
abc     1       I2883-I2889     10      0.0000150940
abc     2       I2883-I2889     10      0.0000150940
abc     3       I2883-I2889     10      0.0000150940
abc     1       I2889-I2896     10      0.000081145
abc     2       I2889-I2896     10      0.000081145
abc     3       I2889-I2896     10      0.000081145
abc     1       I3173-I3177     10      0.000098300
abc     2       I3173-I3177     10      0.000098300
abc     3       I3173-I3177     10      0.000098300
abc     1       I7613-I7615     10      0.000102170
abc     2       I7613-I7615     10      0.000102170
abc     3       I7613-I7615     10      0.000102170
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP