- 论坛徽章:
- 0
|
本帖最后由 linewer 于 2016-07-02 10:17 编辑
近3T的大文件(大概2195822197行),每行一条记录, 想查找符合某条件的行,
在一台Intel(R) Xeon(R) CPU E5-2609 v3 1.90GHz , 64GB内存的服务器上,跑了大半天,最后直接内存溢出了; 最后测试了下grep直接查找,大半天最后出来结果了....
如下程序有啥问题么,或者对于这么大文件用perl处理有啥建议么- #!/usr/bin/env perl
- use Tie::File;
- open( $fn, '>', './line-number.log') or die "Could not open file";
- open( $fm, '>', './tie-result.log') or die "Could not open file";
- tie @array, 'Tie::File', './myresult.json' or die "File error\n";
- $min=1464537601000-900;
- $max=1466783999000;
- for ($n=2195822197;$n>=0;$n--) #只知道大概在文件中下部的样子,具体不知道哪一行,采用从后往前查找匹配
- {
- my $tmp=$array[$n];
- if( $tmp =~ /"Time":"(.*?)",.*"time":"2016-0[5-6].*?","SerialNumber":"123456790abcd"/)
- {
- if ( $1 >= $min && $1 <= $max)
- {
- print $fn "$n\n";
- print $fm "$tmp\n";
- }
- if( $1 < $min)
- {
- last;
- }
- }
- }
- close($fn);
- close($fm);
复制代码 |
|