用于DNA序列反向补码的Perl代码



我试图制作一个perl代码,以.fna文件格式获得DNA的fasta序列的反向补码。sequence02C.fna文件包含100秒的DNA序列:

>adbca3e
TGCTCCCCACGCTTGCCTCTCCAGTACTCAACCAAAGCAGTCTCTAGAAAAACAGTTTCCAACGCAATACGATGGAATTCCACTTCCCAAATATCTC
>4c2a958
TCCCCACGCTTTCGCGCTTCAGCGTCAGTATCTGTCCAGTGAGCTGACTTCTCCATCGGCATTCCTACACAGTACTCTAGAAAAACAGTTTCTGCTC
>0639b5b
TCGCGCCTCAGTGTCCAACGCAATACGAGTTGCAGACCAGGACACATGGAATTCCACTTCCCTCTCCAGTACTCAACCAAAGCAGTCTCTAGAAAAG

我使用了以下命令,它可以打开文件并进行反转,但不会在输出中显示序列ID(例如:>adbca3e(。

代码为:

#!/usr/local/perl
open (NS, "sequence02C.fna");
while (<NS>) {
if ($_ =~ tr/ATGC/TACG/) {print $_;}
}

输出文件只是序列的补充,而不是相反的。此外,它不包含序列ID"0">adbca3e";

有人能建议合适的代码立即对这个序列进行反向互补,并将结果放入输出文件中吗?

只打印包含ATGC的行。你想打印每一行,所以打印不应该是有条件的。

#!/usr/local/perl
use strict;               # Always
use warnings;             # Always
while (<>) {
if (/^>/) {           # Only modify lines starting with ">".
tr/ATGC/TACG/;
$_ = reverse($_);  # You didn't reverse.
}
print;                # Print undconditionally.
}

(默认情况下,tr///print使用$_。(

注意:我没有打开文件。您可以按如下方式使用该程序:

perl program.pl sequence02C.fna >sequence02C_revcomp.fna

perl -i~ program.pl sequence02C.fna

后者在适当的位置修改文件。(小心!先测试一下。不过它确实可以备份。(

你说你有一个程序"使反向";,但它只是互补的。也许这对你来说是一个非常明显的描述,但对我来说不是很清楚

如果通过";反向";您的意思是向后打印字符串,只需使用reverse函数即可。互补I假设取相应的核碱基,这就是你的音译tr/ATGC/TACG/的意思。

要修复不打印id的问题,只需删除print语句上的if条件即可。

我要做的只是使用钻石运算符作为一个像这样的小程序:

use strict;
use warnings;
use feature 'say';
while (<>) {
chomp;
unless (/^>/) {
tr/ATGC/TACG/;            # transliterate non-ids
my $reverse = reverse;    # reverse $_
say $reverse;             # do something with $reverse
}
say;          # print current line
}

然后你可以这样使用这个程序:

$ perl program.pl sequence02C.fna > output.txt

最新更新