【问题标题】:How to use zcat with regex in perl?如何在 perl 中使用 zcat 和正则表达式?
【发布时间】:2012-04-07 10:13:39
【问题描述】:

我有压缩的 .gz 文件,我想通过以下方式打开:

./open.pl file.gz

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

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

我也不确定打印匹配正则表达式的行的语法..

【问题讨论】:

    标签: regex perl file compression zcat


    【解决方案1】:

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

    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 层的解决方案,但我现在还不能完全正确。

    【讨论】:

      【解决方案2】:

      这是我做过类似的事情

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

      【讨论】:

      • toolic 的建议要好得多,如果您不需要在 perl 脚本中进行额外处理... zgrep string_to_match file.gz
      猜你喜欢
      • 2020-02-13
      • 2023-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-18
      • 2012-07-22
      相关资源
      最近更新 更多