2011-05-13 69 views
1

下面的代码完全按照我想要的方式在我的perl脚本中工作。但是,它需要永久运行非常大的文件。有人会知道我的grep命令的perl替代方法吗?grep - perl中的上下文

my $print = `grep --after-context=3 $line $inputfile`; 
print OUTFILE $print 

为了解释上面的代码:它简单地找到一个线在输入文件(称为$inputfile)(称为$line),并打印它发现匹配并按照匹配(来自$inputfile)三行到我OUTFILE(称为OUTFILE)

干杯!

回答

6

虽然没有在推出grep子一些开销,这是一个固定的数额,无关的文件的大小。除非你有一个非常糟糕的执行grep,你不会去o能够在纯Perl中提高搜索时间。实际上,使用Perl搜索大文件可能会比仅针对搜索文件进行优化的grep慢。

如果您只是在寻找第一个匹配项,您可能需要将--max-count=1添加到您的grep命令中。这将导致grep立即退出,而不是读取文件的其余部分以查找其他匹配项。

2

你没有告诉你典型的搜索模式。在某些情况下,通过设置环境LANG=C,请阅读manual以了解含义,您可以通过-F选项加速并禁用NLS。

+0

OP似乎暗示它们有一个固定的模式,所以'-F'是一个非常好的建议 - 即使模式不是完全固定的,很可能使用的正则表达式非常复杂。 – Cascabel 2011-05-13 12:22:26