非常に気になる問題があります...次のような2つの列を持つファイルがあります(前の質問での助けに感謝します):
14430001 0.040
14430002 0.000
14430003 0.990
14430004 1.000
14430005 0.050
14430006 0.490
....................
最初の列は 2 番目の確率の座標です。確率が 0.990 以上で、サイズが 100 を超えるブロックを見つけようとしています。出力として、私は次のようになりたいです:
14430001 14430250
14431100 14431328
18750003 18750345
.......................
ここで、最初の列には各ブロックの開始点の座標があり、2 番目の列にはブロックの終了点があります。
私はこのスクリプトを書きました:
use strict;
#use warnings;
use POSIX;
my $scores_file = $ARGV[0];
#finds the highly conserved subsequences
open my $scores_info, $scores_file or die "Could not open $scores_file: $!";
#open(my $fh, '>', $coords_file) or die;
my $count = 0;
my $cons = "";
my $newcons = "";
while( my $sline = <$scores_info>) {
my @data = split('\t', $sline);
my $coord = $data[0];
my $prob = $data[1];
if ($data[1] >= 0.990) {
#$cons = "$cons + '\n' + $sline + '\n'";
$cons = join("\n", $cons, $sline);
# print $cons;
$count++;
if($count >= 100) {
$newcons = join("\n", $newcons, $cons);
my @array = split /'\n'/, $newcons;
print @array;
}
}
else {
$cons = "";
$count = 0;
}
}
それは私に確率 >=0.990 (最初の場合) の行を与えますが、座標は間違っています。ファイルに印刷しようとするとスタックするため、確認するサンプルは1つだけです。私の説明が役に立たなかったら大変申し訳ありませんが、私はプログラミングが初めてです。
どうか、あなたの助けが必要です... よろしくお願いします!!!