Ich bin zurück mit einer anderen Frage. Ich habe eine Liste von Daten:Perl vergleichen Elemente von Arrays und Gruppierung
1 L DIELTQSPE H EVQLQESDAELVKPGASVKISCKASGYTFTDHE
2 L DIVLTQSPRVT H EVQLQQSGAELVKPGASIKDTY
3 A ALQLTQSPSSLSAS B RITLKESGPPLVKPTCS C ELDKWAN
4 A ALQLTQSPSSLSAS B RITLKESGPPLVKPTCS C ELDKWAG
5 A ALQLTQSPSSLSAS B RITLKESGPPLVKPTCS C LELDKWASL
6 L DIQMTQIPSSLSASLSIC H EVQLQQSGVEVKMSCKASGYTFTS
7 L SYELTQPPSVSVSPGSIT H QVQLVQSAKGSGYSFS P YNKRKAFYTTKNIIG
8 L SYELTQPPSVSVSPGRIT H EVQLVQSGAASGYSFS P NNTRKAFYATGDIIG
9 A MPIMGSSVAVLAIL B DIVMTQSPTVTI C EVQLQQSGRGP
10 A MPIMGSSVVLAIL B DIVMTQSPTVTI C EVQLQQSGRGP
11 L DVVMTQTPLQ H EVKLDESVTVTSSTWPSQSITCNVAHPASSTKVDKKIE
12 A DIVMTQSPDAQYYSTPYSFGQGTKLEIKR
Und ich möchte die dritte Elemente & & 5. Elemente jeder Zeile vergleichen, dann die Gruppe, ob sie die gleichen 3. & & 5. Elemente haben. Zum Beispiel mit den oben genannten Daten werden die Ergebnisse sein:
3: 3 A ALQLTQSPSSLSAS B RITLKESGPPLVKPTCS C ELDKWAN
4 A ALQLTQSPSSLSAS B RITLKESGPPLVKPTCS C ELDKWAG
5 A ALQLTQSPSSLSAS B RITLKESGPPLVKPTCS C LELDKWASL
9: 9 A MPIMGSSVAVLAIL B DIVMTQSPTVTI C EVQLQQSGRGP
10 A MPIMGSSVVLAIL B DIVMTQSPTVTI C EVQLQQSGRGP
Fyi, in den eigentlichen Daten, die 3., 5., 7. Elemente sehr lang sind. Ich habe sie geschnitten, um das Ganze zu sehen.
Dies ist, was ich getan habe, ich weiß, es ist sehr ungeschickt, aber als Anfänger tue ich mein Bestes. Und das Problem ist, dass es nur die erste Gruppe der 'gleichen' Gruppe zeigt. Könnten Sie mir bitte zeigen, wo es schief gelaufen ist und/oder andere schöne Methoden, um das zu lösen, bitte?
my $file = <>;
open(IN, $file)|| die "no $file: $!\n";
my @arr;
while (my $line=<IN>){
push @arr, [split (/\s+/, $line)] ;
}
close IN;
my (@temp1, @temp2,%hash1);
for (my $i=0;$i<=$#arr ;$i++) {
push @temp1, [$arr[$i][2], $arr[$i][4]];
for (my $j=$i+1;$j<=$#arr ;$j++) {
push @temp2, [$arr[$j][2], $arr[$j][4]];
if (($temp1[$i][0] eq $temp2[$j][0])&& ($temp1[$i][1] eq $temp2[$j][1])) {
push @{$hash1{$arr[$i][0]}}, $arr[$i], $arr[$j];
}
}
}
print Dumper \%hash1;
Vielen Dank an alle. Alle deine Kommentare und Codes sind sehr hilfreich für mich. Danke, dass Sie meine "Scheindaten" korrigiert und weitere Schritte in Betracht gezogen haben. :-) – Krista