用perl程序将fq文件的序列行反向输出

硫酸铜oO 发布于 2015/09/18 22:09
阅读 367
收藏 0
本人实属perl小小白一枚
现遇到生信方面的一个问题
需要 将fastq文件中含序列的行做反向处理,其他行不动,最后输出
这里有师兄帮我写的代码
但是在Linux下运行总是提示错误
大牛能否帮忙一看,小小白不胜感激!
首次接触木虫,金币为0,攒了金币后会送给帮助我的牛牛们!
大谢~

举个栗子
@HWI-ST833:306:C7AYCACXX:1:1101:1491:2080#0/1
CGCTGAGAATGAGCCCCGTGTGGTTGGTGCGCGGACACGCACTGCCTGCGTAACTAGAGGGAGCTGACGGATGACGCCCCCGCGCCACGCCGCT
+
CCCFFFFFHHHGHJJJJJFHGIJHIJJDGHHIJJIHIJHHGFFEEEEEED?BDDEDDDDDDBDDDDDDDDBBDDDBDDDDDDDDDDDDDDDDDD

这是fq文件的某条数据,需要取出第二行(序列行),反向(TCGCCGCA……AAGAGTCGC),其他行不动,输出酱紫的:
@HWI-ST833:306:C7AYCACXX:1:1101:1491:2080#0/1
TCGCCGCA……AAGAGTCGC
+
CCCFFFFFHHHGHJJJJJFHGIJHIJJDGHHIJJIHIJHHGFFEEEEEED?BDDEDDDDDDBDDDDDDDDBBDDDBDDDDDDDDDDDDDDDDDD


代码如下:
#!/usr/bin/perl
use warnings;
open (FASTQ,'XXX.fastq');
while (<FASTQ>) {
        my $tmp1=$_;
        chomp($tmp2);
        my $tmp2=<FASTQ>;
        chomp($tmp2);
        my @seq=split//,$tmp2;
        @seq=reverse @seq;
        my $s=join"",@seq;
        my $tmp3=<FASTQ>;
        chomp($tmp3);
        my $tmp4=<FASTQ>;
        chomp($tmp4);
        my @quality=split//,$tmp4;
        @quality=reverse @quality;
        my $q=join"",@quality;
        print "$tmp1\n$s\n$tmp3\n$q\n";
}
close FASTQ;

Linux提示的错误:
Name "main::tmp2" used only once: possible typo at reverse.pl line 6.
readline() on closed filehandle FASTQ at reverse.pl line 4.


感谢牛牛的帮助~~
加载中
0
inuxor
inuxor

perl多年不玩,忘得差不多了

但是,perl处理这么简单的一段文本,不应该用这么长的代码

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部