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 ファイルを検索して、一致するヘッダーとそれに関連付けられているシーケンスを抽出できることを願っています。