【发布时间】:2014-01-31 15:01:52
【问题描述】:
我有一个包含信息的非常大的制表符分隔文件。
chr9 refFlat exon 136333685 136335910 . + . gene_id "CACFD1"; transcript_id "NM_001242370"; exon_number "5"; exon_id "NM_001242370.5"; gene_name "CACFD1";
chrX refFlat exon 51804923 51805135 . - . gene_id "MAGED4B"; transcript_id "NM_001242362"; exon_number "14"; exon_id "NM_001242362.1"; gene_name "MAGED4B";
我有另一个包含搜索坐标的文件(1800 行)
chr11 62105438
chr11 85195064
chr17 33478139
chr21 9827089
我在 for 循环中有一个嵌套的 for 循环,其中坐标文件中的每一行都针对参考文件进行搜索。
#!/usr/bin/perl -w
use strict;
foreach(@coord){
my @query = split(/\t/,$_);
chomp @query; #clean up
foreach(@ref){
my @ref_line = split(/\t/,$_);
chomp @ref_line; #clean up
if(($query[1] >= $ref_line[3]) && ($query[1] <= $ref_line[4])){
if ($query[0] eq $ref_line[0]){
my @sub_ref_line = split(";",$ref_line[8]);
$results {"$query[0],$query[1]"} = "$sub_ref_line[4]";
next;
}
}
}
}
为了速度和内存,我使用文件句柄作为引用而不是将其存储在数组中会更好吗?
【问题讨论】:
-
将
use warnings;添加到文件的开头,而不是将-w添加到shebang (#!) 行。你也应该在里面有use strict;。
标签: arrays perl memory file-io size