Ignora linhas que começam com dois padrões possíveis

0

Estou tentando analisar um código-fonte e gerar cada função ou sub-rotina diferente para um arquivo. Meu problema é que o código fonte pode ser algo assim:

SUBROUTINE ABC
---
END SUBROUTINE
---
#SUBROUTINE to compute...
SUBROUTINE Dummy
---
      WRITE SUBROUTINE XX has finished...
END SUBROUTINE

Assim, posso evitar as linhas comentadas com o seguinte comando.

awk 'BEGIN{IGNORECASE=1};/^[^#]*subroutine/{flag=1;s="tmp_s_"++i}/end subroutine/{flag=0} flag {print $0 > s}' $sourcecodefile

Mas também quero evitar as linhas que possuem WRITE antes da palavra Subroutine. Eu tento este comando mas não funciona corretamente:

awk 'BEGIN{IGNORECASE=1};/[^#|WRITE]*subroutine/{flag=1;s="tmp_s_"++i}/end subroutine/{flag=0} flag {print $0 > s}' $sourcecodefile
    
por Mr. Burns 06.08.2017 / 04:16

1 resposta

1

Talvez use duas condições em vez de uma:

... /^[^#]*subroutine/ && $0 !~ /write subroutine/ ...
    
por 06.08.2017 / 04:26