读取并找到文件大小为1 GB的行

时间:2011-10-19 10:47:51

标签: java php perl text-files

我需要读取大于1 GB的文本文件才能查找特定行。这应该用Perl,PHP或Java编写。此方法不应加载服务器。

有哪些方法可以做到?

4 个答案:

答案 0 :(得分:2)

此处不是很多,但创建一个BufferedReader,一次读取一行并检查它是否是您要查找的行。

答案 1 :(得分: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;
}

我的单行会工作,但有点复杂。

答案 2 :(得分: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;
    }
}

答案 3 :(得分: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>) { 
...