小さな 12 x 2 テキスト ファイル (約 260 バイト) と大きな .bedgraph ファイル (少なくとも 1.3 MB のサイズ) を処理する perl スクリプトを実行しようとしています。これら 2 つのファイルから、スクリプトは新しいベッドグラフ ファイルを出力します。
他の 3 つの .bedgraph ファイルでこのスクリプトを実行しましたが、プロセスが取得し続ける残りのファイルで実行しようとしましたKilled
。
各ファイルで perl スクリプトを実行するには、平均で約 20 分かかり.bedgraph
ます。
サーバーからではなく、ローカル マシンで perl スクリプトを実行しています。Linux OS Ubuntu 12.04 システム 64 ビット 4GB RAM を使用しています。
perl スクリプトの実行が強制終了され続けるのはなぜですか? どうすれば修正できますか?
スクリプトは次のとおりです。
# input file handle
open(my $sizes_fh, '<', 'S_lycopersicum_chromosomes.size') or die $!;
# output file handles
open(my $output, '+>', 'tendaysafterbreaker_output.bedgraph') or die $!;
my @array;
while(<$sizes_fh>){
chomp;
my ($chrom1, $size) = split(/\t/, $_);
@array = (0) x $size;
open(my $bedgraph_fh, '<', 'Solanum_lycopersicum_tendaysafterbreaker.bedgraph') or die $!;
while(<$bedgraph_fh>){
chomp;
my ($chrom2, $start, $end, $FPKM) = split(/\t/, $_);
if ($chrom1 eq $chrom2){
for(my $i = $start; $i < $end; $i++){
$array[$i] += $FPKM;
}
}
}
close $bedgraph_fh or warn $!;
my ($last_start, $last_end) = 0;
my $last_value = $array[0];
for (my $i = 1; $i < $#array; $i++){
my $curr_val = $array[$i];
my $curr_pos = $i;
# if the current value is not equal to the last value
if ($curr_val != $last_value){
my $last_value = $curr_val;
print $output "$chrom1\t$last_start\t$last_end\t$last_value\n";
$last_start = $last_end = $curr_pos;
} else {
$last_end = $i;
}
}
}
close $sizes_fh or warn $!;