最初の列に繰り返し値を持つタブ区切りファイルがあります。最初の列の単一の反復値は、2番目の列の複数の値に対応します。それはこのようなものになります。最初の列の順序の種類ごとに列IDに基づくファイルの解析:perl
AAAAAAAAAA1 m081216|101|123
AAAAAAAAAA1 m081216|100|1987
AAAAAAAAAA1 m081216|927|463729
BBBBBBBBBB2 m081216|254|260489
BBBBBBBBBB2 m081216|475|1234
BBBBBBBBBB2 m081216|987|240
CCCCCCCCCC3 m081216|433|1000
CCCCCCCCCC3 m081216|902|366
CCCCCCCCCC3 m081216|724|193
を、私はそれに対応してちょうど配列を持つファイルに印刷しようとしています。ファイルの名前には、最初の列の繰り返しのシーケンスと、2番目の列のそれに対応するシーケンスの数を含める必要があります。上記の例では、私はそれぞれ3つのシーケンスの3つのファイルを持っています。最初のファイルは、「AAAAAAAAAA1.3.txt」のようなものを命名し、開いたときに次のようになり、次のようになります。
m081216|101|123
m081216|100|1987
m081216|927|463729
私は他の同様の質問を見てきましたが、彼らは、ハッシュを使用して回答されています。列間の関係の数を維持する必要があるため、ハッシュを使用できないとは思いません。たぶんハッシュのハッシュを使う方法がありますか?私はわかりません。 ここまでは私のコードです。
use warnings;
use strict;
use List::MoreUtils 'true';
open(IN, "<", "/path/to/in_file") or die $!;
my @array;
my $queryID;
while(<IN>){
chomp;
my $OutputLine = $_;
processOutputLine($OutputLine);
}
sub processOutputLine {
my ($OutputLine) = @_;
my @Columns = split("\t", $OutputLine);
my ($queryID, $target) = @Columns;
push(@array, $target, "\n") unless grep{$queryID eq $_} @array;
my $delineator = "\n";
my $count = true { /$delineator/g } @array;
open(OUT, ">", "/path/to/out_$..$queryID.$count.txt") or die $!;
foreach(@array){
print OUT @array;
}
}
あなたはおそらくもループからのファイルの書き込みを削除したいと思う、またはあなたがよデータのすべての行でそれを上書きしてください。 –