Perl只读取特定的gz文件行

前端之家收集整理的这篇文章主要介绍了Perl只读取特定的gz文件行前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_502_1@
我正在尝试创建一个解析脚本,解析一个压缩了gunzip的大文本文件(200万行).我只想解析文本文件中的一系列行.到目前为止,我已经使用zgrep -n找到两行,提到我知道将开始的字符串并结束我感兴趣的文件部分.

在我的测试用例文件中,我感兴趣的只是读取123080到139361行.我发现Tie :: File使用它返回的数组对象访问文件行,但不幸的是,这对于枪压缩文件我不起作用和我一起工作.

对于枪械文件,是否有以下内容

use Tie::File
tie @fileLinesArray,'Tie::File',"hugeFile.txt.gz"
my $startLine = 123080;

my $endLine = 139361;    
my $lineCount = $startLine;
while ($lineCount <= $endLine){
    my $line = @fileLinesArray[$lineCount]
    blah blah...
}

解决方法

使用 IO::Uncompress::Gunzip这是一个核心模块:

use IO::Uncompress::Gunzip;

my $z = IO::Uncompress::Gunzip->new('file.gz');
$z->getline for 1 .. $start_line - 1;
for ($start_line .. $end_line) {
    my $line = $z->getline;
    ...
}

处理大文件时,Tie::File变得非常慢并且内存耗尽.

猜你在找的Perl相关文章