簡體   English   中英

Perl 代碼,用於 DNA 序列的反向互補

[英]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 文件中嗎?

您只打印包含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 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM