免费注册 查看新帖 |

Chinaunix

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

如何提高SHELL处理大文本时的效率 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-12 12:21 |只看该作者 |倒序浏览
最近在弄一个SHELL,其功能是对INPUT的文件(CSV)进行格式检查,如空值检查,格式检查(如判断日期,时间的格式是否合法)等.处理完毕后再将处理结果写到日志中.

现在遇到一个问题,就是SHELL运行效率非常低下,处理10000行的数据,得花40多分钟.不晓得大家有何招数提高效率?

对于这个SHELL,我觉得有几个点可能会提高效率,但不晓得如何实现:

1,此SHELL中涉及到一个配置文件,此文件定义了对哪些列作何种类型的CHECK,现在的程序是每读一行INPUT的数据,都要读一次这个配置文件. 能否一次性的将此文件读入内存,以后直接从内存里读取?

2,此SHELL中写日志时,是发现一个问题写一次日志. 我想问的是,能否将日志先缓存一下,待到积累到一定数量时才物理的写磁盘?

3,此SHELL基本上是用纯SHELL语法实现的,中间夹杂了一些AWK. 我想问的是,对于大文本数据的处理,用什么工具效率会比较高?

论坛徽章:
0
2 [报告]
发表于 2010-01-12 12:31 |只看该作者
把input文件样本贴出来,格式是如何检查的说明一下

论坛徽章:
0
3 [报告]
发表于 2010-01-12 12:31 |只看该作者
1,此SHELL中涉及到一个配置文件,此文件定义了对哪些列作何种类型的CHECK,现在的程序是每读一行INPUT的数据,都要读一次这个配置文件. 能否一次性的将此文件读入内存,以后直接从内存里读取?
所谓读入内存, shell中无非是两种方法: 1. 存入变量(这实际是废话, 所有放入内存的东西本质上都是存放在变量中)

如: config_items=$(<config_file)

第二种方法: 使用 pipeline:

如: cat config_file | cmd1 | cmd2

2,此SHELL中写日志时,是发现一个问题写一次日志. 我想问的是,能否将日志先缓存一下,待到积累到一定数量时才物理的写磁盘?

同上, 所谓缓存, 就是将结果现存放在某个shell变量中

3,此SHELL基本上是用纯SHELL语法实现的,中间夹杂了一些AWK. 我想问的是,对于大文本数据的处理,用什么工具效率会比较高?

用什么工具取决于要做的操作 ..如果可能, 尽量用 grep -xF -f ..,来实现搜索

论坛徽章:
0
4 [报告]
发表于 2010-03-03 21:51 |只看该作者
兰州呢?冒个泡哈

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
5 [报告]
发表于 2010-03-03 22:04 |只看该作者
CSV文件、配置文件、shell脚本全部贴出来看看

论坛徽章:
1
巨蟹座
日期:2014-06-04 13:33:30
6 [报告]
发表于 2010-03-03 22:56 |只看该作者
sed awk就擅长文本处理,还慢的话那有什么能更快的
源文件给出来看看

论坛徽章:
0
7 [报告]
发表于 2010-03-04 05:48 |只看该作者
估计LZ不是用SED AWK做的
可能是循环什么的吧

论坛徽章:
0
8 [报告]
发表于 2010-03-04 08:37 |只看该作者
不用想,肯定是lz代码写得有问题。

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
9 [报告]
发表于 2010-03-04 08:50 |只看该作者
不会是把数据文件open/close了10000+次吧

论坛徽章:
0
10 [报告]
发表于 2010-03-04 11:04 |只看该作者
纯awk脚本处理6G日志,总共3300万行记录,不到6分钟。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP