compara dois arquivos e busca dados

0

Eu tenho dois arquivos:

Arquivo Uma amostra

>> AT5G46880.1|PACid:19669936  
#    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
---   ------ ----- --------- --------- ------- -------    -------     -------    ------- -------    ----
1 !  276.3   0.7   5.9e-85   3.8e-82       1     231 []     317     555 ..     317     555 .. 0.96

Alignments for each domain:
== domain 1  score: 276.3 bits;  conditional E-value: 5.9e-85
         MSA_At_Os_START   1 dkslllelaleameeLlslaeeeeplWvksmdkk..pgkeslnleeylrlFeela...kkpegykseasravgvVemdpealv 78 
                             +k + +e a+++++eL +++++eeplW+k+ ++k   +  +ln eey+rlF++ +   +++ ++  eas+a++vV+m++++lv
AT5G46880.1|PACid:19669936 317 EKVIAMEFAVSCVQELTKMCDTEEPLWIKKKSDKigGEILCLNEEEYMRLFPWPMenqNNKGDFLREASKANAVVIMNSITLV 399
                             57899***************************99744445**************9999888999******************* PP

         MSA_At_Os_START  79 eilmddelanrwdelfpsiv.kastlevistgaag.ngtlelmqaelqvlsplvpaRevvflRyckq.ledgtwvvvdvsldh 158
                             + +++   a++w+e+f+siv +a+t+++is+g++g +g+l+lm+aelqvlsplvp+Re +flRy++q +e g w++vd+++d+
AT5G46880.1|PACid:19669936 400 DAFLN---ADKWSEMFCSIVaRAKTVQIISSGVSGaSGSLLLMFAELQVLSPLVPTREAYFLRYVEQnAETGNWAIVDFPIDS 479
                             *****...***********************************************************7889**********99 PP

         MSA_At_Os_START 159 knrgp...kskyvrvrllpSGclIqdlengyskvtwVeHlevdewsvkelyrpllrsglalgakrwvatLrrqcer 231
                              + +    ++  ++++++pSGc+Iqd++ngys+v wVeH+evde++v+e++ ++++sg+a+ga+rw+  L+rqcer
AT5G46880.1|PACid:19669936 480 FHDQMqpmNTITHEYKRKPSGCIIQDMPNGYSQVKWVEHVEVDEKHVHETFAEYVKSGMAFGANRWLDVLQRQCER 555
                             8777777799****************************************************************97 PP

>> AT1G73360.1|PACid:19649192  
#    score  bias  c-Evalue  i-Evalue hmmfrom  hmm to    alifrom  ali to    envfrom  env to     acc
---   ------ ----- --------- --------- ------- -------    ------- -------    ------- -------    ----
1 !  270.5   0.1   3.4e-83   2.2e-80       1     231 []     230     457 ..     230     457 .. 0.98
2 ?    1.9   0.0      0.43   2.8e+02      73      95 ..     544     566 ..     511     654 .. 0.79

Alignments for each domain:
 == domain 1  score: 270.5 bits;  conditional E-value: 3.4e-83
         MSA_At_Os_START   1 dkslllelaleameeLlslaeeeeplWvksmdkkpgkeslnleeylrlFeela..kkpegykseasravgvVemdpealveil 81 
                             dk++++ +al+ameeLl+l++++eplW+++ +++   ++lnl +y+++F++    +k++++++easr++g+V m+++alv+++
AT1G73360.1|PACid:19649192 230 DKPIMTGIALTAMEELLRLLQTNEPLWTRTDGCR---DILNLGSYENVFPRSSnrGKNQNFRVEASRSSGIVFMNAMALVDMF 309
                             7999***************************986...9***************99999************************* PP

         MSA_At_Os_START  82 mddelanrwdelfpsiv.kastlevistgaag..ngtlelmqaelqvlsplvpaRevvflRyckqledgtwvvvdvsldhknr 161
                             md     +w elfpsi+  ++tl vis+g++g  +g+l+l+++e++vlsplv +Re++ lRyc+q e+g+w+vv+vs+d ++ 
AT1G73360.1|PACid:19649192 310 MD---CVKWTELFPSIIaASKTLAVISSGMGGthEGALHLLYEEMEVLSPLVATREFCELRYCQQTEQGSWIVVNVSYDLPQ- 388
                             **...9*************************************************************************887. PP

         MSA_At_Os_START 162 gpkskyvrvrllpSGclIqdlengyskvtwVeHlevd.ewsvkelyrpllrsglalgakrwvatLrrqcer 231
                                 +  ++ ++pSGclIqd++ngyskvtwVeH+e + ++ v+elyr+++++g+a+ga rwv+tL+r+cer
AT1G73360.1|PACid:19649192 389 --FVSHSQSYRFPSGCLIQDMPNGYSKVTWVEHIETEeKELVHELYREIIHRGIAFGADRWVTTLQRMCER 457
                             ..56999******************************888*****************************97 PP

== domain 2  score: 1.9 bits;  conditional E-value: 0.43
         MSA_At_Os_START  73 dpealveilmddelanrwdelfp 95 
                             +p++++++l+d+ ++ +wd l  
AT1G73360.1|PACid:19649192 544 SPQNVFNFLKDERTRPQWDVLSN 566
                             3899*******667899*97654 PP

Exemplo de arquivo B

AT5G46880.1
AT5G27818.1
AT5G77690.1

a saída desejada, neste caso, deve ser

 AT5G46880.1  317     555

ele deve mostrar o id e os valores das colunas 7 e 8, isto é, alifrom e ali to.

Os arquivos A e B são muito maiores que as amostras fornecidas. O que eu quero é corresponder cada linha de ID do arquivo B a A, e se houver correspondência no arquivo A (ID após >> ), imprima os valores nas colunas alifrom e alito em um novo arquivo junto com o ID. Os alinhamentos de dados para cada domínio não são necessários.

Acho que primeiro excluímos os dados desnecessários do arquivo A e armazenamos as primeiras cinco linhas a partir de >> till Alignments for each domain e depois comparamos. mas não sei como proceder.

nota: o arquivo A não é delimitado por tabulações

    
por user106326 13.05.2015 / 17:37

2 respostas

4

Com o programa awk subsequente:

awk '
  BEGIN             { FS = "([[:space:]]+|[|])" }
  NR==FNR           { id[$1] ; next }
  /^>>/ && $2 in id { data = $2 ; f = 1 }
  f && /^[0-9]/     { data = data " : " $10 " " $11 }
  f && !NF          { f = 0 ; print data }
' FileB FileA

você receberá esta saída:

AT5G46880.1 : 317 555
AT1G73360.1 : 230 457 : 544 566

Observação: adicionei o segundo ID ao arquivo B para que você possa ver como várias linhas de atributo serão tratadas.

Como funciona o programa awk :

BEGIN - o separador de campo é definido para que depois possamos acessar o ID de linhas que começam com "> >".

NR==FNR - este é um padrão que é verdadeiro ao ler o primeiro arquivo; os IDs são armazenados.

/^>>/ && $2 in id - combinamos linhas com os IDs e verificamos se o ID encontrado foi memorizado no primeiro arquivo. O ID é salvo para saída e um conjunto de sinalizadores de processamento.

f && /^[0-9]/ - se o sinalizador estiver definido e correspondermos a uma linha que começa com um dígito, adicionamos os respectivos campos 10 e 11 aos dados de saída (separados por dois pontos).

f && !NF - se o sinalizador estiver definido e uma linha vazia for encontrada, o processamento será feito para aquele bloco e o sinalizador será limpo.

    
por 13.05.2015 / 18:24
0

Tente isso

grep -A4 -f <(sed 's/^/^>> /' fileB) fileA | 
    sed -r '/^>>/! s/(\S+\s+){8}((\S+\s+){3}).*//
            s/[][>.-]*\s*//'
    
por 13.05.2015 / 18:14