Hola, explorer.
Muchas gracias por la respuesta. Quiero que los datos de salida estén separados por un tabulador y voy a tener 10 archivos de entrada. En los cuatro en los que tengo todos los genes para una bacteria la organización sería la siguiente (un gen detrás de otro separados por un salto de línea):
Ejemplo archivo A:
Using text Syntax Highlighting
gen_A1
gen_A2
gen_A3
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
Y en los seis archivos de comparación, tendré dos columnas en la que aparecerán solo los ortólogos entre esos dos organismos. Si tengo en cuenta mi fichero con la información de ortólogos entre A y B, este sería el formato (donde cada par de ortólogos están separados por un tabulador):
Ejemplo ortólogos entre A y B:
Using text Syntax Highlighting
gen_A4 gen_B1
gen_A5 gen_B8
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
(Puede que en este fichero no aparezca, por ejemplo, el gen "gen_A2" porque no tenga ningún ortólogo en el organismo B y tal vez tampoco tenga ortólogos con C y D, sin embargo, quiero que aparezca en el archivo de resultados en su columna correspondiente, sin ningún ortólogo asociado).
Muchas gracias de nuevo.
Voy a subir un código (está incompleto, probablemente con muchos errores y no funciona) de mi intento por conseguir el programa, a ver si así aclaro más lo que quiero conseguir):
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
my $F = "./data";
my %O;
my %O2;
my @o = `ls $F/*.comp`;
foreach my $o (@o) {
open in, $o;
while (<in>) {
chomp;
my ($o1, $o2) = split /\t/;
push @{$O{$o1\_$org}}, "$o2\_$org";
push @{$O{$o2}}, $o1;
$O2{$o1} = 1;
$O2{$o2} = 1;
}
close in;
}
foreach my $i (keys %O) {
print "$i\t";
for my $i2 (@{$O{$i2}}) {
next unless (@{$O{$i}});
$O{$i2} = gene_order ($O{$i2});
undef @{@{$O{$i}};
}
print "\n";
}
my @name = `ls $F/*.id`;
foreach my $name (@name) {
open in1, $name:
while (<in1>) {
chomp;
for my $i3 (@{$O{$i}}) {
next unless (@{$O{$i}} =~ $_)
push @{$O{$i}}, "\n$_";
}
}
my %saw; @saw{@{$O{$i}}} = (); @{$O{$i}} = keys %saw; # remove redundant
#my @fff = `ls $F/*.id`;
#foreach my $f (@fff) {
# chomp $f;
# open in, $f;
# while (<in>) {
# chomp;
# my $id = $_;
# next if $O{$id};
# print "$id\n";
# }
# close in;
#}
#subrutine
sub gene_order
{
my ($var1, $var2) = split /\t/;
my ($var3, $var4, $var5) = split /,/;
my @organism = (TFA, sala, sbae, sMC1);
foreach my $i (@org) {
if ($var1 eq $org[$i]) {
$org[$i] = $var1;
}
}
return $resultado;
}
Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4