0

我已经压缩了要使用以下命令打开的 .gz 文件:

./open.pl file.gz

基本上我的目标是只打印出与我的正则表达式匹配的 zip 文件中的某些行......文件很大,所以我现在只想输出到标准输出......我该怎么做?我在想类似的东西:

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

另外,我不确定打印与正则表达式匹配的行的语法。

4

2 回答 2

3

这是我做过类似的事情

open( $handle, "zcat $ARGV[0]|" ) or die("Can't open $ARGV[0]: $!");
while( <$handle> ) {
if( /regex_pattern/ ) {
   print $_;
   }
}
于 2012-03-22T19:49:31.273 回答
1

我怀疑zcat是否会在 gzipped 流的换行符分隔的块上正确运行。相反,您需要在阅读时解压缩流。至少有两种方法可以做到:

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

也可能有一个使用:gzIO 层的解决方案,但我现在还不能完全正确。

于 2012-03-22T19:45:49.990 回答