加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl只读取特定的gz文件行

发布时间:2020-12-16 06:19:55 所属栏目:大数据 来源:网络整理
导读:我正在尝试创建一个解析脚本,解析一个压缩了gunzip的大文本文件(200万行).我只想解析文本文件中的一系列行.到目前为止,我已经使用zgrep -n找到两行,提到我知道将开始的字符串并结束我感兴趣的文件部分. 在我的测试用例文件中,我感兴趣的只是读取123080到1393
我正在尝试创建一个解析脚本,解析一个压缩了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变得非常慢并且内存耗尽.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读