我不是在这个非常好,也许你能帮助我吗? 通过将键和值作为数组推送,我已经成功地将一个表加载到哈希中。 (我知道我的术语可能不正确,请随时纠正,你可以在我的代码中看到我的意思)。无论如何,我无法打印像我想要的输出。我的目标是以fasta格式为每个密钥创建一个单独的文件(请参见下文)。有任何想法吗?如何在Perl中打印散列(或其元素)?
输入: 一个表:
Rank Query Name E-Value Frame Description Accession (to NCBI) Bits Fraction Identical (%) Fraction Conserved (%) HSP Length Query Length Hit Length Coverage Query (%) Coverage Hit (%) Query Start Query End Hit Start Hit End Query String
1 50085564 4e-16 0 rank=0087540 x=1133.0 y=3620.5 length=437 GXEIR0201C1TW2 76.1 60.3174603174603 77.7777777777778 63 149 437 42.2818791946309 14.41647597254 87 149 186 372 YDKANAFLNHGNYLAYGLAATTLWVLGIPHGFAVMHGKTRRGALVFDVADLVKDALVLPWAFI
2 50085564 7e-16 0 rank=0408491 x=1798.0 y=287.0 length=296 GX6ON9A01EN42P 74.8 62.7118644067797 79.6610169491525 59 149 296 39.5973154362416 19.9324324324324 91 149 51 225 NGFLNHGNYLAYGLAATTLWVLGIPHGFAVMHGKTRRGALVFDVADLVKDALVLPWAFI
3 50085564 2e-15 0 rank=0281898 x=768.0 y=1387.0 length=283 GX6ON9A01B5QL5 72.9 63.1578947368421 80.7017543859649 57 149 283 38.255033557047 20.1413427561837 93 149 51 219 FLNHGNYLAYGLAATTLWVLGIPHGFAVMHGKTRRGALVFDVADLVKDALVLPWAFI
4 50085564 3e-15 0 rank=0714663 x=648.0 y=2458.0 length=264 GXEIR0201BU76K 72.3 59.6491228070175 80.7017543859649 57 149 264 38.255033557047 21.5909090909091 93 149 79 247 FLNHGNYLAYGLAATTLWVLGIPHGFAVMHGKTRRGALIFDVADLVKDALILPWAFI
5 50085564 3e-14 0 rank=0643198 x=1035.0 y=163.0 length=398 GXEIR0201CS5IT 69.8 61.4035087719298 78.9473684210526 57 149 398 38.255033557047 14.321608040201 93 149 147 315 FLNHGNYLAYGLAATTLWVLGIPHGFAVMXGKTRRGALVFDVADLVKDALVLPWAFI
6 50085564 4e-09 0 rank=0641162 x=178.0 y=3351.0 length=287 GXEIR0201APZFT 52.3 54.7619047619048 76.1904761904762 42 149 287 28.1879194630872 14.6341463414634 1 42 11 134 PIANTTVILLGNGTSITQAAVRMLAQAGVLIGFCGGGGTPLY
7 50085564 4e-09 0 rank=0189408 x=1683.0 y=2055.0 length=418 GXEIR0201ED2ZD 52.8 45.3333333333333 68 75 149 418 50.3355704697987 17.9425837320574 1 75 64 340 PIANTTVILLGNGTSITQAAVRMLAQAGVLIGFCGGGGTPLYMGNAIEWLTPQSEYRPTEYLQGWLGFWFDDEQRLLTAKAMQHSRIDFLQKV
8 50085564 5e-07 0 rank=0324549 x=1541.5 y=2792.5 length=281 GX6ON9A01D1MRE 45.2 75.8620689655172 89.6551724137931 29 149 281 19.4630872483221 10.3202846975089 121 149 197 281 MXGKTRRGALVFDVADLVKDALVLPWAFI
9 50085564 6e-05 0 rank=0560234 x=126.0 y=2770.0 length=351 GXEIR0201ALEM8 38.7 42.6966292134831 59.5505617977528 89 149 351 59.7315436241611 25.3561253561254 30 124 57 345 LAGFDGDGLIPALDS---SRANID---RAMKTGDLLTSEAQLTKLLYKFAARSTT*KAL/YREHDATDKANGFLNHGNYLAYGLAATTLSG\LGIPHGFAVMHGK
欲输出:在单独的文件(与它的每个accesion是在一个单独的文件中的值,下面的例子是用于这样的文件中的一个)
>GXEIR0201C1TW2
YDKANAFLNHGNYLAYGLAATTLWVLGIPHGFAVMHGKT \ RRGALVFDVADLVKDALVLPWAFI >GXEIR0201C1TW2
NAFLNHGNYLAYGLAATTLWVLGIPHGF/AVMHGKTRRGALVFDVADLVKDALVLPWAF >GXEIR0201C1TW2
YDKANAFLNHGNYLAYGLAATTLWVLGIPHGFA * MHGKTRRGALVFDVADLVKDALVLPWAFI`
(以下加入也一样;我叫我的脚本$关键在一个单独的文件)
我的剧本至今:
#!/usr/bin/perl -w
my $infile=$ARGV[0] or die ("File not opening\n");
#### first file is a list of the reads ... you want to feed this list into a hash to pick only unique ones.
open (LIST,$infile);
my %value=(); #declare the hash
my $rank; my $query; my $evalue; my $frame; my $description; my $key; my $bits;
my$fr_ident; my $fr_cons; my $query_leng; my $hit_leng; my $query_cov; my $hit_cov; my $query_start; my $query_end; my $hit_start; my $hit_end;
my $value;my $hsp_leng;
while (<LIST>)
{
($rank,$query,$evalue,$frame,$description,$key,$bits,$fr_ident,$hsp_leng,$fr_cons,$query_leng,$hit_leng,$query_cov,$hit_cov,$query_start,$query_end,$hit_start,$hit_end,$value) = split(/\t/); # split your input by a /t and enter each into a value// might not need all of these, but good for future ref
push (@{$value{$key}},$value);chomp (@{$value{$key}},$value); # make key and values for each entry
}
foreach $key (sort keys %value)
{
#print "KEY: $key , VALUE: $value , ELEMENT? \$value\{key\} : $value{$key}\n";
print "$key\[email protected]{$value{$key}}\n"; #print all values of each key
#open (OUT, ">".$infile.$key"\_primary.fasta");
}
这给了我钥匙的一个不错的输出,这一切的价值观,我想使用的密钥一个新的文件名,我的最后一行,并有东西在下面显示的输出文件中...
这是48小时后尝试,我在这个非常糟糕的,尝试阅读网上的东西,但我没有很好地遵守。 在此先感谢。
太感谢了......我需要的,我调整了第一部分做打印$ OUT2“> $键\ n“; 打印$ OUT2加入 “\ n> $键\ n”,@ {$值$ {键}}; – 2012-03-18 13:48:22
恩,你的第一段是错的。你试过了吗?只需运行@foo =(“one”,“two”,“three”);打印“测试:@foo \ n”;'看看它打印什么。或者,更好的是,查找'$“'在[参阅perldoc perlvar(http://perldoc.perl.org/perlvar.html)。 – 2012-03-18 16:00:23
感谢你的更正 – stevenl 2012-03-19 01:23:32