小编gri*_*ger的帖子

如何从perl中的stdin和文件中解压缩透明gzip?

我编写了一些用于处理FASTA/FASTQ文件的脚本(例如fastx-length.pl),但是希望使它们更通用,并接受压缩和未压缩文件作为命令行参数和标准输入(以便脚本"只是工作"当你向它们扔掉随机文件时).对我来说,对未压缩和压缩文件(例如压缩读取文件,未压缩的组合基因组)进行工作以及<(zcat file.fastq.gz)快速烦人等事情的插入是很常见的.

这是fastx-length.pl脚本中的一个示例块:

...
my @lengths = ();
my $inQual = 0; # false
my $seqID = "";
my $qualID = "";
my $seq = "";
my $qual = "";
while(<>){
  chomp; chomp; # double chomp for Windows CR/LF on Linux machines
  if(!$inQual){
    if(/^(>|@)((.+?)( .*?\s*)?)$/){
      my $newSeqID = $2;
      my $newShortID = $3;
      if($seqID){
        printf("%d %s\n", length($seq), $seqID);
        push(@lengths, length($seq));
      }
...
Run Code Online (Sandbox Code Playgroud)

我可以看到IO::Uncompress::Gunzip通过以下方式支持透明解压缩:

如果设置此选项并且输入文件/缓冲区不是压缩数据,则模块将允许读取它.

此外,如果输入文件/缓冲区确实包含压缩数据并且紧随其后存在非压缩数据,则设置此选项将使该模块将整个文件/缓冲区视为单个数据流.

我想基本上将一个透明的解压缩插入到菱形运算符中,在加载每个文件和从文件输入中读取一行之间.有谁知道我怎么做到这一点?

compression perl fasta fastq

3
推荐指数
1
解决办法
356
查看次数

标签 统计

compression ×1

fasta ×1

fastq ×1

perl ×1