hace un par de años describía en otra entrada cómo leer de manera eficiente ficheros FASTQ con ayuda de kseq.h. Para ello definí una clase C++ que llamábamos desde Perl5 con Inline::CPP. La entrada de hoy es para contar que se puede hacer lo mismo instalando el módulo Bio::DB::HTS::Kseq desde CPAN, previa instalación en tu sistema de la librería htslib:
$ git clone https://github.com/samtools/htslib.git $ cd htslib $ make $ sudo make install $ cd .. $ sudo cpanm Bio::DB::HTS::Kseq
Ahora podemos escribir código como éste para probarlo:
use strict; use Bio::DB::HTS::Kseq; my ($length,$header,$sequence,$quality); my $kseq = Bio::DB::HTS::Kseq->new("sample18MB.fq.gz"); my $iter = $kseq->iterator(); while(my $r = $iter->next_seq()) { ($header,$sequence,$quality) = ($r->name,$r->seq,$r->qual); print ">$header\n$sequence\n$quality\n"; }
En mis pruebas con un fichero FASTQ comprimido de 18MB, este código es un 20% más lento que la versión Inline::CPP,
hasta luego,
Bruno