免费注册 查看新帖 |

Chinaunix

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

[文本处理] 处理个非常大的文件用awk还是用Python? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-07-25 11:32 |只看该作者 |倒序浏览
有个非常大的文件要处理,大概亿条数据的规模吧

大概是这样的

count:user_count@1405330702789=^@^@^@^@^@^@^@^@^_
count:user_num@1405123296208=0^_
info:team@1405123296982=50000671^_


现在想把user_count非零的并且team的值在一个集合里面的数据找出来,应该怎么整啊

上面那些乱码是从Hbase里面export数据的时候带出来的分隔符。

我grep user_count然后awk它能看出=后面是不是数字,可是怎么能继续判断下面的team的值是否符合要求呢?

头疼

论坛徽章:
0
2 [报告]
发表于 2014-07-25 11:38 |只看该作者
对了,补充一下,user_count后面的数字也不是紧跟=号的,而是有分隔符的,比如这样:

count:user_count@1405330702789=^@^@^@^@^@^@^@^@3^_

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
3 [报告]
发表于 2014-07-25 11:39 |只看该作者
文本处理,awk比python专业多了~

论坛徽章:
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
4 [报告]
发表于 2014-07-25 11:44 |只看该作者
回复 1# sulaimani_yu
给个10几条记录的文本,再给个示范的team集合,
很快就有人给代码的。

   

论坛徽章:
0
5 [报告]
发表于 2014-07-25 12:04 |只看该作者
数据比如这样的:

count:user_count@1405330702789=^@^@^@^@^@^@^@^@^_
count:user_num@1405123296208=0^_
info:team@1405123296982=50000671^_
^^
count:user_count@1400000166287=^@^@^@^@^@^@^@^A^_
count:user_num@1382241122888=0^_
info:team@1383533112230=50008898^_
^^
count:user_count@1396901933090=^@^@^@^@^@^@^@^B^_
count:user_num@1396901933433=0^_
info:team@1396901933270=50021422^_
^^
ROWKEY=14:10000012955^_
count:user_count@1398766330048=^@^@^@^@^@^@^@3^_
count:user_num@1398168030155=0^_
info:team@1398168029628=50008881^_
^^
ROWKEY=14:10000011267^_
count:user_num@1396901933433=0^_
info:team@1396901933270=50021422^_




team的值[50008881,50008898]

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
6 [报告]
发表于 2014-07-25 12:21 |只看该作者
3.4楼真是热心人,路过得2分,走人。

论坛徽章:
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
7 [报告]
发表于 2014-07-25 13:22 |只看该作者
回复 5# sulaimani_yu
如果team集合记录比较多,建议放到一个单独的文件里。
  1. awk -vt1="50008881" -vt2="50008898" 'BEGIN{team[t1];team[t2]} /user_count/{count=gensub(/[^@]*@([0-9]*).*/,"\\1",1);if(count!=0){s=$0;k=1}} k{s=s"\n"$0;if($0~/team@/){tid=gensub(/.*=([0-9]*).*/,"\\1",1);if(tid in team){print s;k=0}}}' i
  2. count:user_count@1400000166287=^@^@^@^@^@^@^@^A^_
  3. count:user_count@1400000166287=^@^@^@^@^@^@^@^A^_
  4. count:user_num@1382241122888=0^_
  5. info:team@1383533112230=50008898^_
  6. count:user_count@1398766330048=^@^@^@^@^@^@^@3^_
  7. count:user_count@1398766330048=^@^@^@^@^@^@^@3^_
  8. count:user_num@1398168030155=0^_
  9. info:team@1398168029628=50008881^_
复制代码
  1. cat i
  2. count:user_count@1405330702789=^@^@^@^@^@^@^@^@^_
  3. count:user_num@1405123296208=0^_
  4. info:team@1405123296982=50000671^_
  5. ^^
  6. count:user_count@1400000166287=^@^@^@^@^@^@^@^A^_
  7. count:user_num@1382241122888=0^_
  8. info:team@1383533112230=50008898^_
  9. ^^
  10. count:user_count@1396901933090=^@^@^@^@^@^@^@^B^_
  11. count:user_num@1396901933433=0^_
  12. info:team@1396901933270=50021422^_
  13. ^^
  14. ROWKEY=14:10000012955^_
  15. count:user_count@1398766330048=^@^@^@^@^@^@^@3^_
  16. count:user_num@1398168030155=0^_
  17. info:team@1398168029628=50008881^_
  18. ^^
  19. ROWKEY=14:10000011267^_
  20. count:user_num@1396901933433=0^_
  21. info:team@1396901933270=50021422^_
复制代码

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
8 [报告]
发表于 2014-07-25 13:25 |只看该作者
本帖最后由 q1208c 于 2014-07-25 13:41 编辑



好象我理解错了楼主的意思.

闪!

论坛徽章:
0
9 [报告]
发表于 2014-07-25 14:32 |只看该作者
多谢啊
team的过滤有效果了,
可是过滤数字的效果没有达到啊

我希望首先把user_count有数字的滤出来,然后再用team过滤



回复 7# Herowinter


   

论坛徽章:
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
10 [报告]
发表于 2014-07-25 14:36 |只看该作者
本帖最后由 Herowinter 于 2014-07-25 14:37 编辑

回复 9# sulaimani_yu

哦,我理解错了,你说的数字不是“user_count@”后面的那串,
而是=后面那个,但是你给的记录含有user_count的行=后面基本没数字?
5楼的文本,你期望的结果是什么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP