2011-10-19 41 views
-1

我需要讀取大於1 GB的文本文件才能查找特定的行。這應該用Perl,PHP或Java編寫。這種方法不應該加載服務器。閱讀並找到文件大小爲1 GB的行

有什麼辦法可以做到嗎?

+0

見http://download.oracle.com/javase/tutorial/essential/io/file.html的信息來源上讀取文件在Java中。 – Qwerky

+0

是一個考試題目還是什麼? –

回答

1

如果你有一個「正確的工具,適合工作」的態度,並且可能會被打擾學習新的工具,perl,awk,甚至sed都是用於這類工作的非常好的工具。否則,任何完整的語言都可以,Java也可以完成這項工作。但是使用緩衝類,比如BufferedReader,否則這將會非常緩慢。

例中的Perl:

use strict; 
use warnings; 

open INFILE, "<infile" or die; 
open OUTFILE, ">outfile" or die; 
while(<INFILE>) { 
    $_=~s/source-regex/replace-with/g; 
    print OUTFILE; 
} 

我的一行的工作,但有一點複雜。

+1

複雜嗎? 'perl -nwe'打印如果/ source-regex /'input.txt> output.txt' – TLP

+0

哎呀,我知道會有某種替換。這一行將會很好。謝謝。 – 0xCAFEBABE

+0

替換並不複雜。只要將'm //'改成'///'並打印即可。相同的土豆。 – TLP

2

這裏並不是很多,但創建一個BufferedReader,一次只讀一行,並檢查它是否是您要查找的行。

1

在Perl中:

use strict; 
use warnings; 

my $line = 'what to be searched'; 
open my $fh, '<', '/path/to/the/file' or die "unable to open file: $!"; 
while(<$fh>) { 
    chomp; 
    if ($_ eq $line) { 
     print "found $line at line $.\n"; 
     last; 
    } 
} 
1

作爲一個班輪:

perl -nwe 'print if /source-regex/' input.txt > output.txt 

爲腳本:

use strict; 
use warnings; 

while (<>) { 
    print if /source-regex/; 
} 

用法:perl script.pl input.txt > output.txt

有辦法來優化這個,但是用您提供的信息可以做更多事情。搜索需要一些時間,並且可能會很慢,具體取決於您的正則表達式。

如果有安全問題,明確的文件打開更安全:

open my $input, '<', shift or die $!; 
while (<$input>) { 
...