zcat读取gzip文件,然后在Perl

时间:2015-12-01 15:18:16

标签: perl concatenation gzip zcat

我需要编写一个perl脚本来从其路径的文本文件列表中读取gzip文件,然后将它们连接在一起并输出到新的gzipped文件。 (我需要在perl中执行此操作,因为它将在管道中实现) 我不知道如何完成zcat和连接部分,因为文件大小是Gbs,我需要处理存储和运行时间。

到目前为止,我可以将其视为 -

use strict;
use warnings;
use IO::Compress::Gzip qw(gzip $GzipError) ;

#-------check the input file specified-------------#

$num_args = $#ARGV + 1;
if ($num_args != 1) {
    print "\nUsage: name.pl Filelist.txt \n";
exit;

$file_list = $ARGV[0];

#-------------Read the file into arrray-------------#

my @fastqc_files;   #Array that contains gzipped files 
use File::Slurp;
my @fastqc_files = $file_list;


#-------use the zcat over the array contents 
my $outputfile = "combined.txt"
open(my $combined_file, '>', $outputfile) or die "Could not open file '$outputfile' $!";

for my $fastqc_file (@fastqc_files) {

    open(IN, sprintf("zcat %s |", $fastqc_file)) 
      or die("Can't open pipe from command 'zcat $fastqc_file' : $!\n");
    while (<IN>) {
        while ( my $line = IN ) {
          print $outputfile $line ;
        }
    }
    close(IN);

my $Final_combied_zip = new IO::Compress::Gzip($combined_file);
  or die "gzip failed: $GzipError\n";

不知怎的,我无法让它运行。此外,如果任何人都可以指导输出此压缩文件的正确方法。

谢谢!

2 个答案:

答案 0 :(得分:1)

你不需要perl。您甚至不需要zcat / gzip,因为gzip压缩文件为cat

cat $(cat pathfile) >resultfile

但是如果你真的需要通过组合来尝试获得额外的压缩:

zcat $(cat pathfile)|gzip >resultfile

添加:还要注意第一个&#34;相关的&#34;右边的链接似乎已经回答了这个问题:How to concat two or more gzip files/streams

答案 1 :(得分:1)

感谢您的回复 - 脚本现在运行良好 -

var firstHTML = '<div class="switchMeOut"><p>First Section Content</div>';
var secondHTML = '<div class="switchMeOut"><p>Second Section Content</div>';
var thirdHTML = '<div class="switchMeOut"><p>Third Section Content</div>'; 

$(document).ready(function(){
    $("button").click(function(){
      var id = $(this).data("id");
      $('div.switchMeOut').html(eval(id));
    });
    $('div.switchMeOut').html(firstHTML + secondHTML + thirdHTML);
});