Hola de nuevo.
Reactivo esta viejo hilo por estar muy relacionado con mi problema actual.
Tengo un archivo de texto con dos columnas separadas por espacio, de tal manera que la primera es un
Transcript ID y la segunda es una proteína. El mismo
Transcript ID puede corresponder a varias proteínas pero también puede haber el mismo
Transcript ID con la misma proteína, por lo que existe redundancia, de la siguiente manera:
Using text Syntax Highlighting
Locus_3_Transcript_3/4_Confidence_0.714_Length_1364 sp|Q924L1|LTMD1_MOUSE
Locus_3_Transcript_3/4_Confidence_0.714_Length_1364 sp|Q924L1|LTMD1_MOUSE
Locus_3_Transcript_3/4_Confidence_0.714_Length_1364 sp|Q28EM8|LTMD1_XENTR
Locus_3_Transcript_3/4_Confidence_0.714_Length_1364 sp|Q6P1Q0|LTMD1_HUMAN
Locus_3_Transcript_3/4_Confidence_0.714_Length_1364 sp|Q6P1Q0|LTMD1_HUMAN
Locus_3_Transcript_4/4_Confidence_0.929_Length_1250 sp|Q924L1|LTMD1_MOUSE
Locus_3_Transcript_4/4_Confidence_0.929_Length_1250 sp|Q924L1|LTMD1_MOUSE
Locus_3_Transcript_4/4_Confidence_0.929_Length_1250 sp|Q924L1|LTMD1_MOUSE
Locus_3_Transcript_4/4_Confidence_0.929_Length_1250 sp|Q6P1Q0|LTMD1_HUMAN
Locus_3_Transcript_4/4_Confidence_0.929_Length_1250 sp|Q6P1Q0|LTMD1_HUMAN
Locus_3_Transcript_4/4_Confidence_0.929_Length_1250 sp|Q6P1Q0|LTMD1_HUMAN
Locus_3_Transcript_4/4_Confidence_0.929_Length_1250 sp|Q28EM8|LTMD1_XENTR
Locus_3_Transcript_4/4_Confidence_0.929_Length_1250 sp|Q28EM8|LTMD1_XENTR
Locus_4_Transcript_15/24_Confidence_0.582_Length_3109 sp|Q2KIR8|TDH_BOVIN
Locus_4_Transcript_15/24_Confidence_0.582_Length_3109 sp|Q2KIR8|TDH_BOVIN
Locus_4_Transcript_15/24_Confidence_0.582_Length_3109 sp|Q2KIR8|TDH_BOVIN
Locus_4_Transcript_15/24_Confidence_0.582_Length_3109 sp|Q8MIR0|TDH_PIG
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
Lo que quiero hacer es ver cuántos
Transcript ID representan cada proteína, pero sin redundancia, es decir si un mismo
Transcript ID representa la misma proteína dos veces, entonces solo cuenta como uno.
Así, en el ejemplo de arriba, el resultado sería
Using text Syntax Highlighting
sp|Q924L1|LTMD1_MOUSE 2
sp|Q28EM8|LTMD1_XENTR 2
sp|Q6P1Q0|LTMD1_HUMAN 2
sp|Q2KIR8|TDH_BOVIN 1
sp|Q8MIR0|TDH_PIG 1
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
Para ello, estoy intentando leer cada línea para formar un
hash de
array, de tal manera que cada clave sea una proteína y su valor sea el
array de
Transcript ID. Por último, quiero crear un
array que me guarde los
Transcript ID únicos en cada valor/array con la función 'uniq' y al final imprimir cada clave con la longitud de su correspondiente
array único.
El resultado que obtengo no es el esperado, porque todos me da como resultado que tienen una única aparición.
Using perl Syntax Highlighting
#!/usr/bin/perl
#use strict;
#use warnings;
#use diagnostics;
use List::MoreUtils qw/ uniq /;
use autodie;
my $transcript; #transcript ID
my $protein; #nombre proteina asociada
my %HashOfArrays;
### Parámetros
@ARGV == 1 or die "Uso: $0 <fichero_transcritos>\n";
my ($fichero_transcritos) = @ARGV[0];
### Lectura del fichero de secuencias
open my $fh_input, q[<], $fichero_transcritos;
open (OUT,">output.txt") or die "can't open OUT file";
while (<$fh_input>) {
chomp;
($transcript,$protein) = split(/ /);#separar las dos columnas por espacio
# guardamos el transcript ID en el array asociado a la proteina
push @{ $HashOfArrays{$protein} }, $transcript; #tenemos un hash con claves "proteinas" y valores arrays de "transcript ID"
}
close $fh_input;
### Salida
for my $family ( keys %HashOfArrays ) { # recorremos todas las proteinas encontradas
my @unique = uniq $HashOfArrays{$family}; #utilizando la libreria MoreUtils creo un array con los transcript IDs unicos para cada clave-proteina.
print OUT "$family\t", @unique."\n"; #imprimo el nombre de la proteina junto con la longitud del array de nombres únicos.
}
close(OUT);
Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
¿Dónde fallo?
Gracias,
D.