Talvez use duas condições em vez de uma:
... /^[^#]*subroutine/ && $0 !~ /write subroutine/ ...
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
Tags text-processing awk