- 論壇徽章:
- 0
|
本帖最后由 linewer 于 2016-07-02 10:17 編輯
近3T的大文件(大概2195822197行),每行一條記錄, 想查找符合某條件的行,
在一臺Intel(R) Xeon(R) CPU E5-2609 v3 1.90GHz , 64GB內(nèi)存的服務(wù)器上,跑了大半天,最后直接內(nèi)存溢出了; 最后測試了下grep直接查找,大半天最后出來結(jié)果了....
如下程序有啥問題么,或者對于這么大文件用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);
復(fù)制代碼 |
|