Donc mon échantillon de données est dans le format suivant.Besoin de comparer les valeurs dans un fichier où la première colonne se répète
jgi|Xentr4|100164|gw1.1441.2.1 scaffold_1441 18150 18354
jgi|Xentr4|100164|gw1.1441.2.1 scaffold_1441 19856 19974
jgi|Xentr4|100164|gw1.1441.2.1 scaffold_1441 21455 21638
jgi|Xentr4|100164|gw1.1441.2.1 scaffold_1441 21727 21897
jgi|Xentr4|100164|gw1.1441.2.1 scaffold_1441 21980 22063
jgi|Xentr4|100164|gw1.1441.2.1 scaffold_1441 24670 24811
jgi|Xentr4|100164|gw1.1441.2.1 scaffold_1441 34741 34902
jgi|Xentr4|100164|gw1.1441.2.1 scaffold_1441 3649 3836
jgi|Xentr4|100164|gw1.1441.2.1 scaffold_1441 59253 59409
jgi|Xentr4|100173|gw1.779.90.1 scaffold_779 101746 101969
jgi|Xentr4|100173|gw1.779.90.1 scaffold_779 106436 107233
et ce que je tente de faire est pour chaque nom unique dans la première colonne, récupérer la valeur min pour la colonne 3 et la valeur maximale de la colonne 4. Ainsi, l'entrée finale aura le même, un fichier délimité par des tabulations, sauf qu'il aura les deux premières colonnes pour chaque nom unique, alors les troisième et quatrième colonnes seront les valeurs min et max mentionnées ci-dessus. Je suis assez novice en programmation et j'ai essayé de le faire en utilisant des hachages mais j'ai lamentablement échoué. J'essaie maintenant avec des tableaux/expressions régulières comme vu ci-dessous.
open (IN, "POS2") || die "nope\n";
my $prev_qn = super;
my $prev_sn = ultra;
my $prev_start = non;
my $prev_end = nono;
while (<IN>) {
chomp;
push (@list, "$_");
}
close (IN);
foreach $v (@list) {
$info = $v;
($query_name, $scaf_num, $start, $end) = split(/\t/, $info);
unless ($info =~ m/^$prev_qn/) {
push @ready, $info;
$prev_qn = $query_name;
$prev_sn = $scaf_num;
$prev_start = $start;
$prev_end = $end;
}
else {
if ($start < $prev_start) {
splice(@ready,2,1,$start);
}
if ($end > $prev_end) {
splice(@ready,3,1,$end);
}
$prev_qn = $query_name;
$prev_sn = $scaf_num;
$prev_start = $start;
$prev_end = $end;
}
foreach $z (@ready) {
print "$z\n";
}
}
la sortie que cela renvoie est ci-dessous.
jgi|Xentr4|100164|gw1.1441.2.1 scaffold_1441 18150 18354
jgi|Xentr4|100164|gw1.1441.2.1 scaffold_1441 18150 18354
19974
jgi|Xentr4|100164|gw1.1441.2.1 scaffold_1441 18150 18354
19974
21638
jgi|Xentr4|100164|gw1.1441.2.1 scaffold_1441 18150 18354
19974
21638
21897
jgi|Xentr4|100164|gw1.1441.2.1 scaffold_1441 18150 18354
19974
21638
22063
jgi|Xentr4|100164|gw1.1441.2.1 scaffold_1441 18150 18354
19974
21638
24811
jgi|Xentr4|100164|gw1.1441.2.1 scaffold_1441 18150 18354
19974
21638
34902
jgi|Xentr4|100164|gw1.1441.2.1 scaffold_1441 18150 18354
19974
3649
34902
jgi|Xentr4|100164|gw1.1441.2.1 scaffold_1441 18150 18354
19974
3649
59409
jgi|Xentr4|100164|gw1.1441.2.1 scaffold_1441 18150 18354
19974
3649
101969
Il semble donc clair que le fichier est en train de faire la comparaison bien, mais il ne remplace pas les éléments du tableau comme prévu, les annexant simplement en dessous et en remplaçant ceux-ci. De plus, il ne s'imprime jamais après le premier nom unique. Aucune suggestion?
deux de ceux travaillé pour moi, merci les gars tellement, j'avais essayé la stratégie de hachage avant, mais était en train de s'enliser dans la syntaxe, de sorte que ces scripts vont également m'aider à apprendre à mieux mettre les choses en place – Adam