2011-05-06 55 views
0

我必须为3个不同的字符串grep一个非常大的文本文件(〜15GB)。重要的是要注意的是三个字符串表示X,Y和Z占文本文件的大约99.9%,并且是相互排斥的。grep和grep -v同时

即X + Y + Z + 0.01%=垃圾完整的文件

那么,有没有办法,我可以做的grep的时间缩短,同时用grep -v功能 因此逻辑的流程应该是:

grep X filename.txt >> linescontainingstringX. 
somehow do grep Y and grep Z on the remaining file ie grep Y >> linesnotcontainingstringX 

请让我知道,如果有一种方法适合我。

+3

我认为你应该使用Perl打开文件并编写相同的代码来实现你的逻辑。 – Raghuram 2011-05-06 05:34:02

+0

@Raghuram - 我想你还没有听说过egrep ... – 2011-05-06 05:42:36

+1

@Brian,我想你没有注意到他正在尝试创建**两个**输出文件:一个带有X行和一个与Y | Z线。你不能用'egrep'完成一次,但你可以用Perl(可能是'awk')。 – cjm 2011-05-06 05:55:39

回答

2

使用Perl。

perl -n -e 'BEGIN{ open XFILE,">x.txt" or die "$!" ; open YFILE,">y.txt" or die "$!"; open ZFILE, ">z.txt" or die "$!";} print XFILE $_ if /X/; print YFILE $_ if /Y/; print ZFILE $_ if /Z/;' 
+0

这很酷。我已经试过了,它正在工作。 – Vineeth 2011-05-06 07:13:34

+0

@ Raghuram:当我看到你的建议时,我正在考虑采用perl脚本方式。完全忘了perl也有命令行执行。 – Vineeth 2011-05-06 07:15:10