- 论坛徽章:
- 1
|
回复 2# rubyish - #@{$fh{$key}}存储文件名为$key的文件内容;
- #所有的key文件读完之后内存使用在1.5G左右;
- #以下是程序的一部分;
- my @file = glob "$dir\\*bed";
- my @bed = glob "$dir3\\*";
- for (@bed){
- my $name = $_;
- $name =~ s/.*bed_(.+)_(.+)\.bed/$1$2/;
- $fdir{$name} = $_;
- }
- while(my ($key, $value)= each %fdir){
- open BED,"<","$fdir{$key}" or die "Can't open file: $key!\n";
- @{$fh{$key}} = map {
- chomp;
- (split '\t')[2];
- } <BED>;
- close BED;
- }
- print "Begin\n";
- for my $in(@file){ # 9个输入文件@file大小总共在20M左右;
- open IN,"<","$in" or die "Can't open $in!\n";
- my @array;
- while(<IN>){
- chomp;
- next if(/^\s*$/);
- push @array,[split('\t',$_)];
- }
- close IN;
- open OUT,">","$in.out";
- for my $gene(@array){
- my $num=0;
- foreach my $line(@{$fh{$gene->[0]}}){ #平均有1800000行;
- last if ($gene->[1] <= $line);
- $num++ if ($line > $gene->[1]);
- }
- print OUT "$num\n";
- }
- close OUT;
- }
复制代码 大侠们,代码差不多就是这样了;
但是还是有问题,我用的是win7,内存使用在4.5G的时候就提示out of memory了。电脑内存有8G
|
|