我需要读取大于1 GB的文本文件才能查找特定行。这应该用Perl,PHP或Java编写。此方法不应加载服务器。
有哪些方法可以做到?
答案 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>) {
...