我想遍历.gz文件并读取文件内容。
我的文件夹结构: 1)ABC.gz 1.1)ABC 1.1.1)Sample1.txt 1.1.2)Sample2.txt 1.1.3)Test1.txt
我想遍历.gz,然后读取并打印Sample * .txt文件的内容。 测试* .txt应该被忽略。重要的是,我不想将gz复制/提取到其他位置。
Perl脚本我必须阅读文件:
use strict;
use warnings;
my $filename = 'Sample1.txt';
open(my $fh, '<:encoding(UTF-8)', $filename)
or die "Could not open file '$filename' $!";
while (my $row = <$fh>) {
chomp $row;
print "$row\n";
}
答案 0 :(得分:1)
首先,gzip文件是单个文件的压缩版本。根据您的描述,您很可能拥有一个tar压缩文件,然后进行压缩。
第二点是你必须在内存或临时文件中解压缩它。
你肯定无法逐行阅读。
请查看Tie::Gzip以处理压缩文件,并在Archive::Tar查看tar档案。
答案 1 :(得分:0)
也许是这样的:
#!/usr/bin/perl -w
use IPC::System::Simple "capture";
use File::Path qw[ make_path remove_tree ];
use warnings;
use strict;
my $tar = "/path/to/archive.tar.gz";
my @list = capture("tar tzf $tar | awk '{print \$NF}'");
my $tmp_path = "/your/tmp/path";
make_path($tmp_path) if not -e $tmp_path;
foreach my $file (@list) {
if ($file =~ /(Sample*\.txt)$/) {
my $out = capture("tar xzf $tmp_path/$1 -O");
print "$out\n";
#unlink $tmp_path/$1;
}
}
remove_tree($tmp_path);