gpt4 book ai didi

perl - 在压缩存档内的文本文件上运行 `head` 而不解压存档

转载 作者:行者123 更新时间:2023-12-05 00:06:04 25 4
gpt4 key购买 nike

你好,

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

旧进程是在 cron 上运行的批处理作业,它完全解压缩每个文件,读取其中的第一行并将其复制到配置文件中,然后重新压缩整个文件。有时,这需要许多小时的处理时间,但没有任何好处。

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

最佳答案

unzip 命令行实用程序有一个 -p将文件转储到标准输出的选项。只需将其输入 head 它不会费心将整个文件提取到磁盘。

或者,来自 perldoc IO::Compress::Zip :

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();

修改以适应,即通过迭代文件列表 $zip->memberNames() ,并且只阅读前几行。

关于perl - 在压缩存档内的文本文件上运行 `head` 而不解压存档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3807761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com