grep - perl中的上下文

时间:2011-05-13 09:18:49

标签: perl optimization grep

下面的代码与我在perl脚本中的完全相同。但是,运行非常大的文件需要花费很长时间。有人会知道我的grep命令的perl替换吗?

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

要解释上面的代码:它只是在输入文件中找到一行(称为$line)并打印出它找到的匹配和匹配后的三行(来自$inputfile)到我的outfile(名为$inputfile

干杯!

2 个答案:

答案 0 :(得分:6)

虽然启动grep子进程有一些开销,但它是一个固定的数量,与文件的大小无关。除非你的grep实现得非常糟糕,否则你无法在纯Perl中改善搜索时间。事实上,使用Perl搜索大型文件可能比grep慢,后者仅针对搜索文件进行了优化。

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

答案 1 :(得分:2)

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