【发布时间】:2015-05-13 11:50:24
【问题描述】:
新的 Perl 用户。
我正在尝试从存储在变量$blast_results 中的一些制表符分隔的数据创建一个哈希表,其中第一列作为键。然后我想将数组@filenames 中的值与哈希表中的键进行比较。如果在哈希键中找到数组值,我想打印出$blast_results 的重新排序结构,如果数组值不在哈希中,我想打印出该值后跟'No Result Found '。
这是我目前所拥有的,我认为哈希表不正确:
#!/usr/bin/env perl
use strict;
use warnings;
use Data:Dumper;
#create variable to mimic blast results
my $blast_results = "file1.ab1 9 350 0.0 449 418 418 403479 403042 567
file3.ab1 2 833 0.0 895 877 877 3717226 3718105 984";
#create array to mimic filename array
my @filenames = ("file1.ab1", "file2.ab1", "file3.ab1");
#header for file
my $header = "Query\tSeq_length\tTarget found\tScore (Bits)\tExpect(E-value)\tAlign-length\tIdentities\tPositives\tChr\tStart\tEnd\n";
#initialize hash
my %hash;
#split blast results into array
my @row = split(/\s+/, $blast_results);
$hash{$row[0]}=$_;
print $header;
foreach my $file (@filenames){
## If this filename has an associated entry in the hash, print it in a re-ordered format
if(defined($hash{$file})){
print "$row[0]\t$row[9]\t$row[1]:$row[7]-$row[8]\t$row[2]\t$row[3]\t$row[4]\t$row[5]\t$row[6]\t$row[1]\t$row[7]\t$row[8]\n";
}
## If not, print this.
else{
print "$file\t0\tNo Blast Results: Sequencing Rxn Failed\n";
}
}
print "-----------------------------------\n";
print "$blast_results\n"; #test what results look like
print "-----------------------------------\n";
print "$row[0]\t$row[1]\n"; #test if array is getting split correctly
print "-----------------------------------\n";
print "$filenames[2]\n"; #test if other array present
print "-----------------------------------\n";
print Dumper(\%hash); #print out hash table
此脚本的结果是(@filenames 数组与哈希不匹配且哈希不包含所有数据):
Query Seq_length Target found Score (Bits) Expect(E-value) Align-length Identities Positives Chr Start End
file1.ab1 0 No Blast Results: Sequencing Rxn Failed
file2.ab1 0 No Blast Results: Sequencing Rxn Failed
file3.ab1 0 No Blast Results: Sequencing Rxn Failed
-----------------------------------
file1.ab1 9 350 0.0 449 418 418 403479 403042 567
file3.ab1 2 833 0.0 895 877 877 3717226 3718105 984
-----------------------------------
file1.ab1 9
-----------------------------------
file3.ab1
-----------------------------------
$VAR1 = {
'file1.ab1' => undef
};
【问题讨论】:
标签: perl