Como grep linhas específicas e imprimir apenas aqueles que correspondem ao caractere

3

Eu tenho um número de arquivos pdb e quero grep apenas as linhas que começam com ^FORMUL e se a linha tiver C seguido do número maior que (C3, C4, C5, C6, etc.) Eu não deveria imprimi-lo.

Eu usei este para extrair a linha que começa com FORMUL , mas não sei como pesquisar através de cada uma das linhas e combiná-lo com C seguido por 3 >.

grep ^FORMUL *pdb (provavelmente aqui tem que colocar algum tipo de corte que, se dentro de cada linha C3 > for encontrado, não imprima).

3OC2.pdb:FORMUL   3  HOH   *207(H2 O)    (print it)                                     
3OC7.pdb:FORMUL   2  SF4    FE4 S4       (print it)                                                
3OC8.pdb:FORMUL   3  NIC    C5 H7 N O7   (don't print, there is C5)                                               
3OC9.pdb:FORMUL   4  HOH   *321(H2 O)    (print it)                                                
3OC10.pdb:FORMUL   3  HEM    2(C34 H32 FE N4 O4)  (don't print, there is C34)
    
por djordje 06.01.2018 / 07:56

2 respostas

4

Use dois greps:

grep '^FORMUL' *pdb | grep -vE 'C([3-9]|[12][0-9])'

A primeira lista as linhas que correspondem a ^FORMUL , a segunda remove ( -v inverte a correspondência) as correspondentes C seguido por um dígito entre 3 e 9, ou dois dígitos começando com 1 ou 2 número maior que 3 será removido).

    
por muru 06.01.2018 / 08:10
1

Acho que isso deve funcionar:

awk '/^FORMUL/ && !match($4, /C[3-9]?[0-9]/) {print;}' *.pdb 

?: tem uma fonte de dados on-line que poderíamos tentar?

ref (página 154): ftp://ftp.wwpdb.org/ pub / pdb / doc / format_descriptions / Format_v33_A4.pdf

    
por cdplayer 06.01.2018 / 10:01