[英]Perl code for reverse complement of DNA sequence
我試圖制作一個perl代碼以獲取 a.fna 文件格式的 DNA fasta 序列的反向補充。 sequence02C.fna文件包含 100 條 DNA 序列:
>adbca3e
TGCTCCCCACGCTTGCCTCTCCAGTACTCAACCAAAGCAGTCTCTAGAAAAACAGTTTCCAACGCAATACGATGGAATTCCACTTCCCAAATATCTC
>4c2a958
TCCCCACGCTTTCGCGCTTCAGCGTCAGTATCTGTCCAGTGAGCTGACTTCTCCATCGGCATTCCTACACAGTACTCTAGAAAAACAGTTTCTGCTC
>0639b5b
TCGCGCCTCAGTGTCCAACGCAATACGAGTTGCAGACCAGGACACATGGAATTCCACTTCCCTCTCCAGTACTCAACCAAAGCAGTCTCTAGAAAAG
我使用了以下命令,它可以打開文件並進行反向但不顯示 output 中的序列 ID(例如: >adbca3e
)。
代碼是:
#!/usr/local/perl
open (NS, "sequence02C.fna");
while (<NS>) {
if ($_ =~ tr/ATGC/TACG/) {print $_;}
}
output文件只是序列的互補而不是反向。 此外,它不包含序列 ID ">adbca3e"
任何人都可以建議適當的代碼來立即執行此序列的反向互補並將結果放入 output 文件中嗎?
您只打印包含A
、 T
、 G
或C
的行。 你想打印每一行,所以打印不應該是有條件的。
#!/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
function。 我假設補充的是相應的核鹼基,這就是您的音譯的意思tr/ATGC/TACG/
。
要修復不打印 ID,只需刪除打印語句上的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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.