Verificando se o 'bloco' tem um padrão único

3

Eu tenho um arquivo com o número de 'blocos' (três blocos neste exemplo) que se parecem com isto:

A4_RAT  Amyloid-beta A4 protein;    P08592  PDB; 1M7E; X-ray; 2.45 A; D/E/F=755-763.
                                    PDB; 1NMJ; NMR; -; A=672-699.
                                    PDB; 1OQN_I3P.pdb; X-ray; 2.30 A; C/D=755-763.
                                    PDB; 2LI9; NMR; -; A/B=672-687.

AACP_AGRFC  Aminoacyl carrier protein;  A9CHM9          PDB; 2JQ4; NMR; -; A=1-83.
                                    PDB; 4H2W_5GP.pdb; X-ray; 1.95 A; C/D=1-83.
                                    PDB; 4H2X_G5A.pdb; X-ray; 2.15 A; C/D=1-83.
                                    PDB; 4H2Y; X-ray; 2.10 A; C/D=1-83.

AADB1_KLEPN 2''-aminoglycoside nucleotidyltransferase;  P0AE05  PDB; 4WQK; X-ray; 1.48 A; A=1-177.
                                    PDB; 4WQL; X-ray; 1.73 A; A=1-177.
                                    PDB; 5KQJ_GOL.pdb; NMR; -; A=1-177.

Cada 'bloco' tem PDB; , XXXX/XXXX_XXX.pdb; , Xray/NMR; colunas. Das duas últimas colunas da frase anterior ( XXXX; ou XXXX_XXX.pdb; e X-ray; or NMR; ), há várias opções que estou encontrando em cada bloco:

XXXX; X-ray; em XXXX_XXX.pdb; X-ray; em XXXX; NMR; em XXXX_XXX.pdb; NMR;

Estou tentando pesquisar apenas os "blocos" que têm apenas XXXX_XXX.pdb; X-ray; e apenas os "blocos" que têm apenas XXXX_XXX.pdb; NMR; .

No exemplo aqui, se eu fizer a pesquisa para aqueles que têm apenas XXXX_XXX.pdb; X-ray; , espero que o resultado seja:

A4_RAT  Amyloid-beta A4 protein;    P08592  PDB; 1M7E; X-ray; 2.45 A; D/E/F=755-763.
                                    PDB; 1NMJ; NMR; -; A=672-699.
                                    PDB; 1OQN_I3P.pdb; X-ray; 2.30 A; C/D=755-763.
                                    PDB; 2LI9; NMR; -; A/B=672-687.

AACP_AGRFC  Aminoacyl carrier protein;  A9CHM9          PDB; 2JQ4; NMR; -; A=1-83.
                                    PDB; 4H2W_5GP.pdb; X-ray; 1.95 A; C/D=1-83.
                                    PDB; 4H2X_G5A.pdb; X-ray; 2.15 A; C/D=1-83.
                                    PDB; 4H2Y; X-ray; 2.10 A; C/D=1-83.

Por outro lado, se eu pesquisar por aqueles que têm apenas XXXX_XXX.pdb; NMR; , espero que o resultado seja:

AADB1_KLEPN 2''-aminoglycoside nucleotidyltransferase;  P0AE05  PDB; 4WQK; X-ray; 1.48 A; A=1-177.
                                    PDB; 4WQL; X-ray; 1.73 A; A=1-177.
                                    PDB; 5KQJ_GOL.pdb; NMR; -; A=1-177.

Alguém tem idéia de como fazer isso no bash?

    
por sergio 26.03.2018 / 11:33

1 resposta

2

Supondo que você tenha linhas vazias entre cada bloco, conforme mostrado na sua pergunta, então:

$ awk -v RS='\n\n' '/...._...\.pdb; NMR;/' RS= infile
AADB1_KLEPN 2''-aminoglycoside nucleotidyltransferase;  P0AE05  PDB; 4WQK; X-ray; 1.48 A; A=1-177.
                                    PDB; 4WQL; X-ray; 1.73 A; A=1-177.
                                    PDB; 5KQJ_GOL.pdb; NMR; -; A=1-177.
$ awk -v RS='\n\n' '/...._...\.pdb; X-ray;/' RS= infile
A4_RAT  Amyloid-beta A4 protein;    P08592  PDB; 1M7E; X-ray; 2.45 A; D/E/F=755-763.
                                    PDB; 1NMJ; NMR; -; A=672-699.
                                    PDB; 1OQN_I3P.pdb; X-ray; 2.30 A; C/D=755-763.
                                    PDB; 2LI9; NMR; -; A/B=672-687.
AACP_AGRFC  Aminoacyl carrier protein;  A9CHM9          PDB; 2JQ4; NMR; -; A=1-83.
                                    PDB; 4H2W_5GP.pdb; X-ray; 1.95 A; C/D=1-83.
                                    PDB; 4H2X_G5A.pdb; X-ray; 2.15 A; C/D=1-83.
                                    PDB; 4H2Y; X-ray; 2.10 A; C/D=1-83.

Para preservar as linhas vazias, remova RS= e adicione a declaração {print $0"\n"} :

$ awk -v RS='\n\n' '/...._...\.pdb; NMR;/{print $0"\n"}' infile
$ awk -v RS='\n\n' '/...._...\.pdb; X-ray;/{print $0"\n"}' infile
    
por devWeek 26.03.2018 / 12:55