perl 如何分析1G以上的大文件

perl 如何分析1G以上的大文件

处理1G的大文件 断点续读的方式 有什么好解决办法
楼主没说清楚吧?如何分析1G以上的大文件,怎么又出来个断点续读的?(只听说过断点续传是我孤陋寡闻?)


QUOTE:
原帖由 yuio654 于 2007-11-16 16:40 发表
楼主没说清楚吧?如何分析1G以上的大文件,怎么又出来个断点续读的?(只听说过断点续传是我孤陋寡闻?)

处理到一半, 想关机了, 明天开机接着处理. 之类的.

如果你要的只是"断点续读", 那就保存当前状态.
如果你是想平衡内存占用和IO, 那就加点判断.
是的,如果读取到某一段,突然发生意外中断,可以保留当前读取位置


QUOTE:
如果你要的只是"断点续读", 那就保存当前状态.
如果你是想平衡内存占用和IO, 那就加点判断.

我是新手,平衡内存占用和IO怎么做?
降低IO: 你内存NB的话, 一次性读入整个文件:>
降低内存: while (<FILE>) {...} 或者几次读几千行, 这个看你的喜好了.
顺便问一下,怎么一次性读取100行数据?
哦,多谢指导,我写下试试


QUOTE:
原帖由 __lxmxn__ 于 2007-11-16 17:14 发表
顺便问一下,怎么一次性读取100行数据?

恩, 问得好.

简单的做法是while (<>) 计数, 虽然实际还是一行一行读入的, 但是在buffer机制下还不错.
比读一行, 处理一行好多了.

另一种做法是: 估计平均一行的字节数的高值, sysread你需要的行数的总字节, 然后substr/rindex找最后的\n, 去掉.
对这些行处理后, sysseek刚去掉的字节数.


QUOTE:
原帖由 Lonki 于 2007-11-16 17:45 发表


恩, 问得好.

简单的做法是while () 计数, 虽然实际还是一行一行读入的, 但是在buffer机制下还不错.
比读一行, 处理一行好多了.

另一种做法是: 估计平均一行的字节数的高值, sysread你需要的行数的总 ...

Hi Lonki, 不知道你说的这个方法怎么样,我常常处理这样的分析需求。每天分析都是要跑很久。等会改成你这种方式看看:) 你可有效果对比啊? 呵呵。我处理的gz文件都有1.8G一个,头大哦。