Contar y agrupar aminoácidos de diferentes TF
Publicado: 2012-02-04 16:51 @744
Hola a todos.
Tengo un problema con un script que tengo que hacer en Perl. Llevo muchos días intentando solucionarlo pero no hay manera. Ahí va:
Tengo una lista en .txt formada por una columna de tipo de factor de transcripción (TF) y otra formada por sus aminoácidos. ej:
[etc]
Lo que necesito es simple: tengo que conseguir que me lea los aminoácidos de cada TF, distinga qué TF es y me los agrupe en ese TF cada a.a. con su frecuencia. Para ello sé que tengo que trabajar con hashes y eso. Mi problema es que de Perl controlo más bien poco, pero bueno, ahí va lo que llevo escrito hasta ahora:
Vale, pues ejecutando este script me da el siguiente output:
[...]
y así hasta que termina con todas las líneas en las que $id eq 'TF1'.
Pues eso, quiero que me las agrupe todas dentro del hash %TFn y no me vaya dando el resultado una a una sin almacenarlas.
Muchas gracias por adelantado.
Tengo un problema con un script que tengo que hacer en Perl. Llevo muchos días intentando solucionarlo pero no hay manera. Ahí va:
Tengo una lista en .txt formada por una columna de tipo de factor de transcripción (TF) y otra formada por sus aminoácidos. ej:
Using text Syntax Highlighting
TF1 ATLHLSNIPPSVTMDDLKNLFEAGCSVKAFKFFQKDRKMALIQLGSVEEAIQALIELHNHDLGENHHLRVSFSKS
TF1 ATLHLSNIPPSVTVDDLKNLFEAGCSVKAFKFFQKDRKMALIQLGSVEEAIQALIELHNHDLGENHHLRVSFSKS
TF1 ATLHLSNIPQNVTEDDLRLLFNTGGTVKAFKFFQDRKMALIQMSTVEEAIQALIDLHNYNMGGNQHLRVSFSKS
TF2 GKMFVGGLSWDTSKKDLKDYFTKFGDVSDCTIKFDSDSGRSRGFGFVLFKDPSSVEKVLQQKEHRLDGRLIDPKRAMAMKKEPV
TF2 GKMFVGGLSWDTSKKDLKDYFTKFGEVSDCTIKFDSDSGRSRGFGFVLFKDPSSVKKVLEQKEHRLDGRLIDPQRAMAMKKEPV
TF3 GKMFVGGLSWDTSKKDLKDYFTKFGEVTDCTIKMDPNTGRSRGFGFILFKEPGSVEKVLEQKEHRLDGRLIDPKKAMAMKKDPVKK
TF1 ATLHLSNIPPSVTVDDLKNLFEAGCSVKAFKFFQKDRKMALIQLGSVEEAIQALIELHNHDLGENHHLRVSFSKS
TF1 ATLHLSNIPQNVTEDDLRLLFNTGGTVKAFKFFQDRKMALIQMSTVEEAIQALIDLHNYNMGGNQHLRVSFSKS
TF2 GKMFVGGLSWDTSKKDLKDYFTKFGDVSDCTIKFDSDSGRSRGFGFVLFKDPSSVEKVLQQKEHRLDGRLIDPKRAMAMKKEPV
TF2 GKMFVGGLSWDTSKKDLKDYFTKFGEVSDCTIKFDSDSGRSRGFGFVLFKDPSSVKKVLEQKEHRLDGRLIDPQRAMAMKKEPV
TF3 GKMFVGGLSWDTSKKDLKDYFTKFGEVTDCTIKMDPNTGRSRGFGFILFKEPGSVEKVLEQKEHRLDGRLIDPKKAMAMKKDPVKK
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
[etc]
Lo que necesito es simple: tengo que conseguir que me lea los aminoácidos de cada TF, distinga qué TF es y me los agrupe en ese TF cada a.a. con su frecuencia. Para ello sé que tengo que trabajar con hashes y eso. Mi problema es que de Perl controlo más bien poco, pero bueno, ahí va lo que llevo escrito hasta ahora:
Using perl Syntax Highlighting
- #!/usr/bin/perl -w
- use strict;
- my $arg0 = $ARGV[0];
- if ( !$arg0 ){
- print STDERR "Usage: $0 file_name\n";
- exit(0);
- }
- open(FILE,"<$arg0") or die("cannot open $arg0");
- while (<FILE>){
- chomp;
- my ($id, $seq) = split("\t", $_);
- my $i=0;
- my %TF1;
- if ( $id eq 'TF1') {
- my @TF1_aa = split(//,$seq);
- # for(my $i=0; $i < scalar(@TF1_aa); $i++){
- # $TF1{$TF1_aa[$i]}++;
- # esto es lo que nos han dado como ejemplo para trabajar pero con esto el hash se llena con TODOS los aminoácidos de la lista sin distinguir el tipo de TF. Así pues, cambié a if/elsif pero dentro de estas condiciones veo que no puedo declarar un for y por ello pasé a while
- while ($i < scalar(@TF1_aa)){ $i++;
- $TF1{$TF1_aa[$i]}++};
- my @aa = keys( %TF1 );
- my @aa_count = values( %TF1 );
- print "@aa\n";
- print "@aa_count\n";
- # estos print los pongo para poder ver cómo está trabajando el script y si está haciendo lo que quiero o no
- } elsif ($id eq 'TF2') {
- # aquí repito lo anterior pero cambiándolo por $TF2 y así elsif con todos los tipos que tengo en la lista
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
Vale, pues ejecutando este script me da el siguiente output:
Using text Syntax Highlighting
Use of uninitialized value within @TF1_aa in hash element at test.pl line 31, <FILE> line 1.
S F T N K E Y V Q M C L A P D R I G
1 6 6 4 2 5 5 4 6 2 1 1 6 5 2 7 7 3 6
Use of uninitialized value within @TF1_aa in hash element at test.pl line 31, <FILE> line 2.
F S T N K E Y V Q L A W P D R I G
1 4 3 2 4 2 7 3 7 1 4 8 1 3 5 8 2 9
Use of uninitialized value within @TF1_aa in hash element at test.pl line 31, <FILE> line 3.
F S T K E Y V Q C L A W P D R I G
1 4 4 2 2 6 2 9 1 1 4 7 1 3 7 10 3 7
Use of uninitialized value within @TF1_aa in hash element at test.pl line 31, <FILE> line 4.
F S T N K E Y V Q L A P H D I R G
1 5 3 1 2 5 6 3 5 1 6 2 1 2 8 5 7 8
S F T N K E Y V Q M C L A P D R I G
1 6 6 4 2 5 5 4 6 2 1 1 6 5 2 7 7 3 6
Use of uninitialized value within @TF1_aa in hash element at test.pl line 31, <FILE> line 2.
F S T N K E Y V Q L A W P D R I G
1 4 3 2 4 2 7 3 7 1 4 8 1 3 5 8 2 9
Use of uninitialized value within @TF1_aa in hash element at test.pl line 31, <FILE> line 3.
F S T K E Y V Q C L A W P D R I G
1 4 4 2 2 6 2 9 1 1 4 7 1 3 7 10 3 7
Use of uninitialized value within @TF1_aa in hash element at test.pl line 31, <FILE> line 4.
F S T N K E Y V Q L A P H D I R G
1 5 3 1 2 5 6 3 5 1 6 2 1 2 8 5 7 8
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
[...]
y así hasta que termina con todas las líneas en las que $id eq 'TF1'.
Pues eso, quiero que me las agrupe todas dentro del hash %TFn y no me vaya dando el resultado una a una sin almacenarlas.
Muchas gracias por adelantado.