Perl 在压缩档案中的文本文件上运行'head',无需解压缩档案

Perl 在压缩档案中的文本文件上运行'head',无需解压缩档案,perl,parsing,shell,zip,etl,Perl,Parsing,Shell,Zip,Etl,您好 我从以前的团队接手,编写处理csv文件的ETL作业。我在ubuntu上使用shell脚本和perl的组合。csv文件是巨大的;它们以压缩档案的形式到达。解压,许多都超过30Gb-是的,这是一个G 遗留进程是一个在cron上运行的批处理作业,它完全解压每个文件,读取第一行并将其复制到配置文件中,然后重新解压整个文件。有些日子,这需要很多小时的处理时间,但毫无益处 您是否可以建议一种方法,仅从压缩存档中的每个文件中提取第一行(或前几行),而不完全解压存档?Python允许您通过访问以流形式访问

您好

我从以前的团队接手,编写处理csv文件的ETL作业。我在ubuntu上使用shell脚本和perl的组合。csv文件是巨大的;它们以压缩档案的形式到达。解压,许多都超过30Gb-是的,这是一个G

遗留进程是一个在cron上运行的批处理作业,它完全解压每个文件,读取第一行并将其复制到配置文件中,然后重新解压整个文件。有些日子,这需要很多小时的处理时间,但毫无益处

您是否可以建议一种方法,仅从压缩存档中的每个文件中提取第一行(或前几行),而不完全解压存档?

Python允许您通过访问以流形式访问存档文件。从那里您可以根据需要处理它们。

命令行实用程序有一个
-p
选项,用于将文件转储到标准输出。只需将其导入,就不会麻烦将整个文件解压缩到磁盘

或者,从:


根据需要修改,即通过迭代文件列表
$zip->memberNames()
,只阅读前几行。

我知道这不是答案,但要有信心,至少在gzip存档中,你可以做到,即使只是vi也可以读入gzip。对于gzip,它是zcat和zgrep程序,我不知道这些程序是否与常规zip一起工作。为什么要重新压缩文件?为什么它不能使用原始的zip文件呢?
unzip-p filename.zip | head-1>>headers.txt
工作完美,非常感谢
my ($status, $bufferRef);
my $member = $zip->memberNamed( 'xyz.txt' );
$member->desiredCompressionMethod( COMPRESSION_STORED );
$status = $member->rewindData();
die "error $status" unless $status == AZ_OK;
while ( ! $member->readIsDone() )
{
   ( $bufferRef, $status ) = $member->readChunk();
   die "error $status" if $status != AZ_OK && $status != AZ_STREAM_END;
   # do something with $bufferRef:
   print $$bufferRef;
}
$member->endRead();