我有一个长文件类型

Processin SCRIPT10 file..
Submitted batch job 1715572
Processin SCRIPT100 file..
Processin SCRIPT1000 file..
Submitted batch job 1715574
Processin SCRIPT10000 file..
Processin SCRIPT10001 file..
Processin SCRIPT10002 file..
Submitted batch job 1715577
Processin SCRIPT10003 file..
Submitted batch job 1715578
Processin SCRIPT10004 file..
Submitted batch job 1715579

我想找出未提交的作业(脚本名称)。这意味着在处理行之后没有行提交的批处理作业。

到目前为止,我已经尝试使用
pcregrep -M "Processin.*\n.*Processin" execScripts2.log | awk 'NR % 2 == 0'

但是,如果不处理多个脚本,则无法正确处理这种情况。令人惊讶的是,它仅输出SCRIPT1000和SCRIPT10001线。你能告诉我更好的单线吗?

理想情况下,输出将仅是下一行没有“Submitted”的行(或只是脚本名称),这意味着:
SCRIPT100
SCRIPT10000
SCRIPT10001

谢谢。

最佳答案

awk可以完成此工作:

awk -v s='Submitted' '$1 != s{if(p != "") print p; p=$2} $1 == s{p=""}' file

SCRIPT100
SCRIPT10000
SCRIPT10001

引用: Effective AWK Programming

关于bash - bash中的多行模式匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44155099/

10-12 15:55