2011-05-13 49 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