Eu consegui achar uma resposta pra isso e acredito que a melhor forma seria usar o <b>sort</b> para manter as chaves ordenadas. <br>esse foi o link que comenta sobre os valores serem retornados aleatoriamente. <a href="http://perldoc.perl.org/functions/keys.html">http://perldoc.perl.org/functions/keys.html</a><br>
<br>o que vcs acham?<br><br>Abraço.<br><br><br><div class="gmail_quote">Em 4 de junho de 2012 00:32, André Torres <span dir="ltr"><<a href="mailto:andretorresrj@gmail.com" target="_blank">andretorresrj@gmail.com</a>></span> escreveu:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Gabriel e Breno,<br><br>Obrigado pelas respostas super úteis.<br>Entao, eu fiz as modificações que vcs me sugeriram. O fato de colocar a hash para ordenar os 2 valores em função do nome foi ótimo, pq ja vou saber que nomes tiveram mais de duas repetições para "triad" e "binding". Agora, tenho uma duvida como os valores sao lidos e guardados na hash, pois o meu output nao sai ordenado pelo nome como no arquivo input. eu fiz algo errado, ou existe uma forma de deixar a lista ordenada pelos nomes da mesma forma que o input?<br>

em relação ao resto do codigo, eu cosegui compreender as soluções, 
exceto por uma das soluções que o Gabriel deu em relação a ler a nova 
antiga e a linha atual.<br>o código modificado vai no final do texto.<br>
<br>Muito obrigado.<br>
<br>
André Torres.<br><br><br>exemplo de input X output:<br><b>input:</b><br>name<br>32<br>45<br>65<br>... <br><br><b>output:</b><br>name<br>65<br>32<br>45<br>...<br><br>________________________________________________________________________<br>

#!/usr/bin/perl<br>use strict;<br>use warnings;<br><br>#my $hmm_name = $ARGV[0];<br>my @name_seq;<br>my $line;<br>#my $linha_atual;<br>#my $linha_anterior;<br>my $triad;<br>my $T;<br>my $BP;<div class="im"><br>my $hmm_name = shift;<br>
<br>
open my $fh, '<', $hmm_name or die "Error: $!";<br>my %sequencias = ();<br>while (<$fh>){<br>   next unless /^Q#/;<br>   my @name_seq = split /\s+/;<br></div>       if ($name_seq[5] eq 'triad' or $name_seq[5] eq 'binding'){<br>

       $triad = $name_seq[-4];<br>       }<br>       else{<br>       print "nao existe triade ou binding poket"; #caso $triad recupere algum valor diferente de 'triad' ou 'binding'<br>       }<br>

       $sequencias{$name_seq[2]} .='|***'. $triad; #define $name_seq[2] como a chave<br>}<br>          foreach my $seq (keys %sequencias){ # o valor de cada chave organizada na hash é passada para a variavel $seq. <br>

          print $seq . $sequencias{ $seq } . "\n"; #imprime a chave e os campos relacionados a cada uma.<br>          }<br>close $fh;<br>exit;<br>___________________________________________________________________________________<br>

<br><br><br><br><br><div class="gmail_quote">Em 2 de junho de 2012 18:34, breno <span dir="ltr"><<a href="mailto:breno@rio.pm.org" target="_blank">breno@rio.pm.org</a>></span> escreveu:<div><div class="h5"><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

Boa Gabriel!<br>
<br>
André, usando as dicas dele, que tal a seguinte versão:<br>
<br>
------------------->8-------------------<br>
my $hmm_name = shift;<br>
<br>
open my $fh, '<', $hmm_name<br>
  or die "Error: $!";<br>
<br>
my %sequencias = ();<br>
<br>
while (<$fh>) {<br>
  next unless /^Q#/;<br>
<br>
  my @name_seq = split /\s+/;<br>
<br>
  my ($name_seq, $triad) = @name_seq[2,5];<br>
<br>
  if ($triad eq 'triad' or $triad eq 'binding') {<br>
    $sequencias{ $name_seq } .= '|' . $name_seq[-4];<br>
  }<br>
}<br>
<br>
foreach my $seq (keys %sequencias) {<br>
  print $seq . $sequencias{ $seq } . "\n";<br>
}<br>
<br>
close $fh;<br>
-------------------8<-------------------<br>
<br>
Você consegue entender o que cada parte está fazendo? Isso te atende?<br>
Preste atenção nas dicas do Gabriel e não deixe de responder se tiver<br>
alguma dúvida!<br>
<br>
<br>
[]s<br>
<br>
-b<br>
<br>
2012/6/2 Gabriel Vieira <<a href="mailto:gabriel.vieira@gmail.com" target="_blank">gabriel.vieira@gmail.com</a>>:<br>
<div><div>> 1) Sempre inicie os seus programas com:<br>
><br>
> use strict;<br>
> use warnings;<br>
><br>
><br>
> 2) Use o open com 3 parâmetros:<br>
><br>
> open my $f, '<', $hmm_name or die "Error: $!";<br>
><br>
><br>
> 3) Evite usar a variável especial $_, declare uma variável para<br>
> receber o conteúdo:<br>
><br>
> while ( my $line = <$f> ) {<br>
><br>
> 4) Declare suas variáveis, sempre:<br>
><br>
>      my @name_seq = split /\s+/, $line;<br>
>      my $name_seq   = $name_seq[2];<br>
>      my $triad            = $name_seq[5];<br>
><br>
><br>
> 5) == é comparador numérico:<br>
><br>
> perl -E 'my $a = "b"; say $a == "a"'<br>
><br>
> Sempre que os dois valores estiverem preenchidos por valores não<br>
> numéricos irá retornar 1 (verdadeiro).<br>
><br>
><br>
> 6) = é atribuição de valor:<br>
><br>
> if ( my $x = "oi" ) { print $x }<br>
><br>
> Sempre irá atribuir o valor do lado direito à variável e validar esse<br>
> valor. Se for 0 ou undef, será falso, para todas as outras existe<br>
> mastercard.. ops.. será verdadeiro.<br>
><br>
><br>
> 7) Você atribuiu um valor a @T em 2 condições, qual seria o valor de<br>
> @T caso elas não fossem atendidas?<br>
><br>
><br>
> Dito isso, e pedindo ajuda aos monges caso eu tenha escrito alguma<br>
> besteira, vamos à resposta da sua pergunta.<br>
><br>
> Vejo algumas soluções de imediato:<br>
><br>
> 1) Utilização de HASH, onde o valor em comum às linhas seria a chave:<br>
><br>
> push @{ $hash{">AAEL000511-PA"}, "S327,E453,H567";<br>
><br>
> Claro, isso com as variáveis no lugar das constantes.<br>
> Isso implica em memória, então você avalia se vale a pena.<br>
><br>
><br>
> 2) Utilização de uma variável temporária para armazenar a linha atual<br>
> e ser lida junto com a próxima:<br>
><br>
> my $linha_anterior;<br>
><br>
> while ( my $linha_atual = <$f> ) {<br>
><br>
>  if ( defined $linha_anterior ) {<br>
>      print $linha_anterior . $linha_atual;<br>
>      undef $linha_anterior;<br>
>   }<br>
>   else {<br>
>      $linha_anterior = $linha_atual;<br>
>   }<br>
><br>
> }<br>
><br>
><br>
> 3) Faça nova leitura do stream (mais elegante, IMHO):<br>
><br>
> while ( my $linha_anterior = <$f> ) {<br>
>   my $linha_atual = <$f>;<br>
> }<br>
><br>
><br>
> 4) Existem outras maneiras...<br>
><br>
><br>
> É isso...<br>
><br>
> 2012/6/2 André Torres <<a href="mailto:andretorresrj@gmail.com" target="_blank">andretorresrj@gmail.com</a>>:<br>
>> oi pessoal,<br>
>><br>
>> estou com uma duvida.<br>
>><br>
>> eu estou extraindo duas colunas de um arquivo texto, mas gostaria de deixar<br>
>> elas organizadas em apenas em uma linha e nao em duas como estoa no arquivo<br>
>> original. nao sei como fazer para o que eu li na primeira linha ser colocado<br>
>> junto o que for lido na segunda.<br>
>><br>
>> ai embaixo vai um exemplo da entrada e da saida que eu estou tendo e a que<br>
>> eu queria.<br>
>><br>
>> obrigado.<br>
>><br>
>> input:<br>
>> Q#1 - >AAEL000511-PA     specific    catalytic triad    S327,E453,H567<br>
>> 3    3    29383<br>
>> Q#1 - >AAEL000511-PA     specific    substrate binding pocket<br>
>> G245,G246,G247,E326,S327,A328,V331,A482,L486,N487,V522,G568,I571    13<br>
>> 13    29383<br>
>><br>
>> output que estou tendo:<br>
>> AAEL000511-PA S327,E453,H567<br>
>> AAEL000511-PA<br>
>> G245,G246,G247,E326,S327,A328,V331,A482,L486,N487,V522,G568,I571<br>
>><br>
>> output desejado:<br>
>>>AAEL000511-PA | S327,E453,H567 |<br>
>>> G245,G246,G247,E326,S327,A328,V331,A482,L486,N487,V522,G568,I571<br>
>><br>
>> codigo:<br>
>><br>
>> open (READ, "$hmm_name") or die ("Error: $!");<br>
>><br>
>> while (<READ>)<br>
>> {<br>
>>     if ($_ =~/^Q#/) {<br>
>>        @name_seq = split (" ", $_);<br>
>>        $name_seq = $name_seq[2];<br>
>>        $triad = $name_seq[5];<br>
>>        }<br>
>>        if ($triad == "triad"){<br>
>>        @T = $name_seq[-4];<br>
>>        }<br>
>>            elsif ($triad = "binding"){<br>
>>            @T = $name_seq[-4];<br>
>>            }<br>
>> print "@T\n";<br>
>> }<br>
>> close (READ);<br>
>><br>
>><br>
>><br>
>> --<br>
>> André Torres<br>
>><br>
>> "Quando o homem aprender a respeitar até o menor ser da criação, seja animal<br>
>> ou vegetal, ninguém precisará ensiná-lo a amar seu semelhante." (Albert<br>
>> Schweitzer - Nobel da Paz de 1952)<br>
>><br>
>> _______________________________________________<br>
>> Rio-pm mailing list<br>
>> <a href="mailto:Rio-pm@pm.org" target="_blank">Rio-pm@pm.org</a><br>
>> <a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br>
><br>
><br>
><br>
> --<br>
> Gabriel Vieira<br>
> _______________________________________________<br>
> Rio-pm mailing list<br>
> <a href="mailto:Rio-pm@pm.org" target="_blank">Rio-pm@pm.org</a><br>
> <a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br>
_______________________________________________<br>
Rio-pm mailing list<br>
<a href="mailto:Rio-pm@pm.org" target="_blank">Rio-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br>
</div></div></blockquote></div></div></div><div class="HOEnZb"><div class="h5"><br><br clear="all"><br>-- <br>André Torres<br><br>"Quando o homem aprender a respeitar até o menor ser da criação, seja animal ou vegetal, ninguém precisará ensiná-lo a amar seu semelhante." (Albert Schweitzer - Nobel da Paz de 1952)<br>


</div></div></blockquote></div><br><br clear="all"><br>-- <br>André Torres<br><br>"Quando o homem aprender a respeitar até o menor ser da criação, seja animal ou vegetal, ninguém precisará ensiná-lo a amar seu semelhante." (Albert Schweitzer - Nobel da Paz de 1952)<br>