2012-03-22 37 views
0

我已经使用压缩的.gz,我想打开文件:如何在perl中使用zcat和正则表达式?

./open.pl file.gz 

基本上我的目标是只打印出符合我的正则表达式的zip文件的某些行......这些文件都大,所以我只是想输出到标准输出现在...我怎么做到这一点?我在想somethig像:

while(<>){ 
    zcat $_ | <my regex> ???? 
} 

而且我不知道有关语法打印线条勾勒出相匹配的正则表达式..

+0

您可以用'zgrep'? – toolic 2012-03-22 19:43:06

回答

1

我怀疑zcat将在一个压缩流的换行分隔块正常运行。相反,您会在阅读时解压缩流。至少有几个方法可以做到这一点:

foreach my $argv (@ARGV) { 
    open my $gz, "zcat $argv |"; 
    while (<$gz>) { 
     # now $_ is an uncompressed line from the file $argv 
     print if /my pattern/; 
    } 
} 

有可能使用:gz IO层,过一个解决方案,但我不能完全得到的是正确的现在。

3

下面是我做过类似

open($handle, "zcat $ARGV[0]|") or die("Can't open $ARGV[0]: $!"); 
while(<$handle>) { 
if(/regex_pattern/) { 
    print $_; 
    } 
} 
+0

工具的建议是好得多,如果你不需要额外的处理你的perl脚本... zgrep string_to_match file.gz – 2012-03-22 19:53:03