5 개의 탭 구분 열이있는 테이블이 있습니다. 테이블은 끝에 제공됩니다. 열 "Name1"에는 하나 또는 여러 개의 "Name2"가 있습니다. 각 "Name2"에는 "Length", "Score"및 "Target (s)"이 있습니다.
다음 기준에 따라 하나의 "Name2"및 해당 "Name1"만 선택해야합니다.특정 조건에 따라 테이블에서 행 선택
(1) "Name2"의 유형이 하나 뿐인 경우 "Name1", "Name2", "Length"및 "Score"를 인쇄하십시오.
(2) 두 개 이상의 "Name2"유형 (동일한 "Name1")이있는 경우 "Name2"의 대상을 비교하십시오. 목표 세트가 모든 "Name2"에서 동일하면 높은 "Score"를 가진 하나의 "Name2"를 인쇄하십시오. 점수가 같으면 가장 높은 길이의 "Name2"를 인쇄하십시오. "Score"와 "Length"가 같으면 "Name1", "Score"및 "Length"가있는 첫 번째 "Name2"를 인쇄하십시오.
해시의 모든 테이블 정보를 가져올 수있는 프로그램을 작성했지만 동일한 "Name1"의 다른 "Name2"의 대상을 비교하는 방법을 쓸 수는 없습니다. 누구든지 프로그램을 완료하는 데 도움을 주시면 감사하겠습니다. 고마워. 프로그램은
#!/usr/bin/perl
use Data::Dumper;
%data=();
@arraysiRNA=();
$i=0;
$file1=$ARGV[0];
open(FP1, $file1);
while($siRNA=<FP1>)
{
chomp($siRNA);
@aa=split(/\t/,$siRNA);
($clone_id,$amplicon_id,$amplicon_length,$amplicon_evidence,$amplicon_target)=split /\t/,$siRNA;
if(exists $data{$clone_id})
{
$data{$clone_id}{$amplicon_id}{amplicon_length}=$amplicon_length;
$data{$clone_id}{$amplicon_id}{amplicon_evidence}=$amplicon_evidence;
push(@{ $data{$clone_id}{$amplicon_id}{amplicon_target}}, $amplicon_target);
}
else
{
$data{$clone_id}{$amplicon_id}{amplicon_length}=$amplicon_length;
$data{$clone_id}{$amplicon_id}{amplicon_evidence}=$amplicon_evidence;
push(@{ $data{$clone_id}{$amplicon_id}{amplicon_target}}, $amplicon_target);
}
$i++;
}
#print Dumper(\%data);
foreach $Name1 (keys %data)
{
foreach $Name2 (keys %{$data{$Name1}})
{
$len=$data{$Name1}{$Name2}{amplicon_length};
$evid=$data{$Name1}{$Name2}{amplicon_evidence};
@[email protected]{$data{$Name1}{$Name2}{amplicon_target}};
#select only unique targets
@uniqueTar = do { my %seen; grep { !$seen{$_}++ } @tar };
print "$Name1\t$Name2\tamplicon_length= $len\n";
print "amplicon_evidence= $evid\n";
print "amplicon_target= @tar\n";
print "amplicon_target uniq= @uniqueTar\n";
}
}
close FP1;
(A) 입력 파일
Name1 Name2 Length Score Target
sjj2_2RSSE.1 sjj2_2RSSE.1#II_15269285_15270181 897 3 WBGene00007064
sjj2_2RSSE.1 sjj2_2RSSE.1#II_15269295_15270191 897 4 WBGene00007064
sjj2_AC3.1 sjj2_AC3.1#V_10368996_10369727 732 3 WBGene00005532
sjj2_AC3.2 sjj2_AC3.2#V_10373256_10373988 733 3 WBGene00007070
sjj2_AC3.2 sjj2_AC3.2#V_10373256_10373988 733 3 WBGene00007028
sjj2_AC3.2 sjj2_AC3.2#V_10373256_10373988 733 3 WBGene00007019
sjj2_AC3.2 sjj2_AC3.2#V_10373256_10376356 3101 2 WBGene00007070
sjj2_AC3.2 sjj2_AC3.2#V_10373256_10376356 3101 2 WBGene00007028
sjj2_AC3.2 sjj2_AC3.2#V_10373256_10376356 3101 2 WBGene00007019
sjj2_AC3.6 sjj2_AC3.6#V_10393744_10394300 557 3 WBGene00000724
sjj2_AH10.1 sjj2_AH10.1#V_14146901_14148094 1194 4 WBGene00007082
sjj2_AH6.10 sjj2_AH6.10#II_9548665_9549674 1010 3 WBGene00003177
sjj2_AH6.10 sjj2_AH6.10#II_9548675_9549684 1010 2 WBGene00003177
(B) 예상 출력
Name1 Name2 Length Score
sjj2_2RSSE.1 sjj2_2RSSE.1#II_15269295_15270191 897 4
sjj2_AC3.1 sjj2_AC3.1#V_10368996_10369727 732 3
sjj2_AC3.2 sjj2_AC3.2#V_10373256_10373988 733 3
sjj2_AC3.6 sjj2_AC3.6#V_10393744_10394300 557 3
sjj2_AH10.1 sjj2_AH10.1#V_14146901_14148094 1194 4
sjj2_AH6.10 sjj2_AH6.10#II_9548665_9549674 1010 3
Program.pl " ./Program.pl Inputfile.txt으로 흥분했다
정말 '엄격한'과 'ẁarnings'을 사용해야합니다. –