ハッシュのハッシュを作成しました。ファイルのすべての行は、5 番目のフィールドの値に応じて「マスター」ハッシュのキーにソートされます。
%Tiles
には n 個のキーがあり、各キーは異なる$Tile_Number
.
の各要素の値は、現在のハッシュ キーの番号である%Tiles
すべての行を含むハッシュ ハッシュへの参照です。$Tile_Number
これらの新しいキー (行) の値はそれぞれ 1 です。
$Tiles{$Tile_Number}{$Line}=1
、$Tiles{$Tile_Number}
多くの$Line=1
エントリがあります。
各$Tiles{$Tile_Number}
ハッシュを個別のファイルに出力し、できればキーの作成時にファイルを作成し、$Tile_Number
新しい$Tiles{$Tile_Number}{$Line}=1
ものが追加されるたびに出力して、メモリを節約したいと考えています。
最終値 (1) を出力しないのが最善ですが、これは省略できると思います。
「マスター」ハッシュの各キーに対して新しいファイルを開き、そのすべてのキーを出力するように Perl に指示するにはどうすればよいですか?
コード:
use strict;
use warnings;
my ($Line) = "";
my (@Alignment_Line) = ();
my (%Tiles) = ();
my $Huge_BAM_File= $ARGV[0] or die $USAGE;
open(HUGE_BAM_FILE,"< $Huge_BAM_File") || die "Sorry I couldn't open the INPUT file: $Huge_BAM_File !\n";
while(<HUGE_BAM_FILE>){
### Remove new line characters "\n"
### Split each line by "\t" and by ":" (for fields within READ ID FIELD)
chomp;
$Line = $_;
@Alignment_Line = split(/\t+|\:/, $Line);
my $Tile_Number = $Alignment_Line[4]
##########################################################
### Fill in hash of hashes %Tiles ###
### Key = $Tile_Number ###
### Second key is $Line ###
### and is filled with a 1 ###
### Each key contains all the alignments with that tile###
### number ###
##########################################################
$Tiles{$Tile_Number}{$Line} = 1;
##Here, I would like to write this new entry into the corresponding file,
and maybe remove it from the hash so the program doesn't run out of memory.
}
閉じる (HUGE_BAM_FILE); 閉じる (ALL_OUTPUTS_GENERATED);