我有一个数组,其中包含 DNA 序列的唯一 ID(数字)。我已经将我的 DNA 序列放在一个散列中,这样每个键都包含一个描述性标题,它的值就是 DNA 序列。此列表中的每个标题都包含基因信息,并以其唯一的 ID 号为后缀:
唯一 ID:14272
标头(哈希键):PREDICTEDXenopusSiluranatropicalishypotheticalproteinLOCLOCmRNA14272
序列(哈希值):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 文件以提取它匹配的标头及其关联的序列。