免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2497 | 回复: 7

130W的文件分类脚本求优化 [复制链接]

论坛徽章:
0
发表于 2012-06-27 15:00 |显示全部楼层
现有邮件备份大约130W以上的邮件,需要更具邮件内发件人和收件人做分类,保存到不同的目录下面。

目前使用所有邮件list和所有用户list,用2个for做这个文件循环查询。    第一个for是查邮件list,第二个for是查用户list,因为用户数毕竟少的多了。

然后发现4cor的cpu,其中只能使用到一个core,而且几乎占满了,其他3个空闲。 脚本无法重复运行,系统响应会很慢很慢。 目前跑了1天,只完成百分之几的量。


求一下方法,如何能高效快速!!!!

论坛徽章:
0
发表于 2012-06-27 15:24 |显示全部楼层
本帖最后由 personball 于 2012-06-27 15:27 编辑

回复 1# very_99


    最多多开几个进程去后台执行,可以分割下待处理的资源,进程对不同部分进行处理

另外提醒下:循环体内的代码最好少涉及io,不然再怎么优化代码也会慢死,最好先提取一下文件关键信息,做完分类后再根据分类结果去做IO方面的事

论坛徽章:
0
发表于 2012-06-27 15:49 |显示全部楼层
放后台也无法并发运行,单个cpu占用马上100%  系统异常慢。
  1. for  所有邮件list文件
  2. do
  3.    for  所有用户list
  4.      do  grep 发信用户 如果在邮件内容里  就 cp 到特定目录

  5. done
  6. done
复制代码

论坛徽章:
0
发表于 2012-06-27 16:09 |显示全部楼层
1:这样的逻辑比较难受,下面的awk的类似逻辑,读一遍userlist,就可以了;
  1. awk 'BEGIN{while(getline<userlistfile){diretory[user]=xxxxx;}}{xxxxxxx}' maillist
复制代码
2:还有就是2楼的建议,IO的操作最好可以集中完成,并且尽量的少;

论坛徽章:
0
发表于 2012-06-27 16:24 |显示全部楼层
jils2013 发表于 2012-06-27 16:09
1:这样的逻辑比较难受,下面的awk的类似逻辑,读一遍userlist,就可以了;2:还有就是2楼的建议,IO的操作 ...




读一遍的可以理解了。  遍历一遍maillist,把发送的,接收的,CC, BCC 的都处理一下。 这样比较好,

论坛徽章:
0
发表于 2012-06-27 16:28 |显示全部楼层
一个邮件内 发送人的好写了。

收件人是多人的话,语句怎么搞啊?


收件人是多人时候,是在一行的 用;做间隔
cc是多人的时候, 是多行的。

论坛徽章:
0
发表于 2012-06-27 16:40 |显示全部楼层
邮件内内容格式为:
  1. *************
  2. *****************
  3. From:= FSDFDSsdfxfsadffdsfdsf <sender@xxx.com>
  4. To:= <d@com;e@com:f@com>
  5. Cc:= <a@xxx.com>;
  6.          <b@xxx.com>
  7. ***************8
  8. *****************
  9. ***********88
复制代码

论坛徽章:
2
白羊座
日期:2013-11-18 19:52:42辰龙
日期:2014-09-07 07:46:06
发表于 2012-07-05 09:22 |显示全部楼层
把两个for的完整代码贴出来看看
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP