첫 번째 열에 반복되는 값을 갖는 탭 구분 파일이 있습니다. 첫 번째 열의 단일이지만 반복되는 값은 두 번째 열의 여러 값에 해당합니다. 그것은이 같은 같습니다 첫 번째 열의 시퀀스의 모든 유형에 대해열 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
을, 나는에 해당하는 단지 순서로 파일로 인쇄하려합니다. 파일의 이름에는 첫 번째 열에 반복되는 시퀀스와 두 번째 열에 해당 시퀀스의 수를 포함해야합니다. 위의 예제에서 나는 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;
}
}
당신은 아마 또한 루프에서 파일 쓰기를 제거 할 수 있습니다, 또는 당신은거야 모든 데이터 라인과 함께 쓰십시오. –