1

DNA シーケンスの一意の ID (数値) を含む配列があります。各キーに説明的なヘッダーが含まれ、その値が DNA シーケンスになるように、DNA シーケンスをハッシュに入れました。このリストの各ヘッダーには遺伝子情報が含まれており、一意の ID 番号が末尾に付いています。

固有 ID: 14272

ヘッダ(ハッシュキー): PREDICTEDXenopusSiluranatropicalishypothetical proteinLOCLOCmRNA14272

シーケンス (ハッシュ値): ATGGGTC...

各一意の ID を循環し、各ヘッダーの末尾の番号 (ハッシュ キー) と一致するかどうかを確認し、一致する場合は、ハッシュ キー + 値をファイルに出力します。これまでのところ、私はこれを持っています:

my %hash; 
@hash{@hash_index} = @hash_seq;

foreach $hash_index (sort keys %hash) {
        for ($i=0; $i <= $#scaffoldnames; $i++) {
            if ($hash_index =~ /$scaffoldnames[$i]/) {
                print GENE_ID "$hash_index\n$hash{$hash_index}\n";
        }
    }
}
close(GENE_ID);

これにより、一意の ID が @scaffoldnames 内に含まれます。

これはうまくいきません!一致を見つけるためにハッシュと配列の両方をループする最善の方法がわかりません。


以下に展開します。

アップストリーム コード:

foreach(@scaffoldnames) {
     s/[^0-9]*//g;
} #Remove all non-numerics

my @genes = read_file('splice.txt'); #Splice.txt is a fasta file

my $hash_index = '';
my $hash_seq = '';
foreach(@genes){
    if (/^>/){
        my $head = $_;
        $hash_index .= $head; #Collect all heads for hash
    }
        else {
            my $sequence = $_;
            $hash_seq .= $sequence; #Collect all sequences for hash
        }
}

my @hash_index = split(/\n/,$hash_index); #element[0]=head1, element[1]=head2
my @hash_seq = split(/\n/, $hash_seq); #element[0]=seq1, element[1]=seq2

my %hash; # Make hash from both arrays - heads as keys, seqs as values
@hash{@hash_index} = @hash_seq;

foreach $hash_index (sort keys %hash) {
        for ($i=0; $i <= $#scaffoldnames; $i++) {
            if ($hash_index =~ /$scaffoldnames[$i]$/) {
                print GENE_ID "$hash_index\n$hash{$hash_index}\n";
        }
    }
}
close(GENE_ID);

私は、cuffdiff (RNA-Seq) によって出力されるすべての異なる発現遺伝子を (一意の ID によって) 分離し、それらを元の足場 (この場合は発現配列) に関連付けようとしています。

したがって、各一意の ID を分離し、元の fasta ファイルを検索して、一致するヘッダーとそれに関連付けられているシーケンスを抽出できることを願っています。

4

1 に答える 1