我已經編寫了幾個用於處理FASTA/FASTQ文件的腳本(例如fastx-length.pl),但希望使它們更通用,並且同時接受壓縮文件和未壓縮文件作爲命令行參數和標準輸入(以便腳本「只是工作「,當你扔在他們的隨機文件)。對於我來說,處理未壓縮和壓縮的文件(例如壓縮讀取文件,未壓縮的組裝基因組)是很常見的,並且像<(zcat file.fastq.gz)
這樣的插槽會很快變得煩人。如何從perl中的stdin和文件中進行透明的gzip解壓縮?
下面是來自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));
}
...
我可以看到IO::Uncompress::Gunzip
通過支持透明解壓:如果這個選項被設置
和輸入文件/緩衝區不壓縮數據,模塊將允許讀取它。另外,如果輸入文件/緩衝區確實包含壓縮數據並且緊接其後有非壓縮數據,設置此選項將使該模塊將整個文件/緩衝區視爲單個數據流。
我想基本上插入一個透明的解壓縮到the diamond operator之間,加載每個文件和從文件輸入讀取一行。有誰知道我該怎麼做?
你爲什麼要撥打chomp兩次?是不是第二chomp冗餘? – winni2k
這是爲了在Linux系統上使用Windows格式文件(我常常這樣做,因爲大多數與Windows電腦合作的人)刪除CR/LF。見[這裏](http://www.perlmonks.org/?node_id=830687)。 – gringer
哈哈。我應該真的走出去...... – winni2k