我已经压缩了要使用以下命令打开的 .gz 文件:
./open.pl file.gz
基本上我的目标是只打印出与我的正则表达式匹配的 zip 文件中的某些行......文件很大,所以我现在只想输出到标准输出......我该怎么做?我在想类似的东西:
while(<>){
zcat $_ | <my regex> ????
}
另外,我不确定打印与正则表达式匹配的行的语法。
我已经压缩了要使用以下命令打开的 .gz 文件:
./open.pl file.gz
基本上我的目标是只打印出与我的正则表达式匹配的 zip 文件中的某些行......文件很大,所以我现在只想输出到标准输出......我该怎么做?我在想类似的东西:
while(<>){
zcat $_ | <my regex> ????
}
另外,我不确定打印与正则表达式匹配的行的语法。
这是我做过类似的事情
open( $handle, "zcat $ARGV[0]|" ) or die("Can't open $ARGV[0]: $!");
while( <$handle> ) {
if( /regex_pattern/ ) {
print $_;
}
}
我怀疑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/;
}
}
也可能有一个使用:gz
IO 层的解决方案,但我现在还不能完全正确。