我正在尝试分析源代码并将每个不同的函数或子例程输出到文件中。我的问题是源代码可能是这样的:
SUBROUTINE ABC
---
END SUBROUTINE
---
#SUBROUTINE to compute...
SUBROUTINE Dummy
---
WRITE SUBROUTINE XX has finished...
END SUBROUTINE
因此,我可以使用以下命令避免注释行。
awk 'BEGIN{IGNORECASE=1};/^[^#]*subroutine/{flag=1;s="tmp_s_"++i}/end subroutine/{flag=0} flag {print $0 > s}' $sourcecodefile
但我也想避免在“子例程”一词之前有“WRITE”的行。我尝试这个命令,但它不能正常工作:
awk 'BEGIN{IGNORECASE=1};/[^#|WRITE]*subroutine/{flag=1;s="tmp_s_"++i}/end subroutine/{flag=0} flag {print $0 > s}' $sourcecodefile
答案1
也许使用两个条件而不是一个:
... /^[^#]*subroutine/ && $0 !~ /write subroutine/ ...