我有一个类型的长文件
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
Run Code Online (Sandbox Code Playgroud)
我想找出未提交的作业(脚本名称).这意味着在处理线之后没有线提交批处理作业.
到目前为止,我已尝试使用
pcregrep -M "Processin.*\n.*Processin" execScripts2.log | awk 'NR % 2 == 0'
Run Code Online (Sandbox Code Playgroud)
但是当多个脚本没有得到处理时,它无法正确处理这种情况.令人惊讶的是,它仅输出SCRIPT1000和SCRIPT10001线.你能告诉我一个更好的单班车吗?
理想情况下,输出将只是下一行(或只是脚本名称)上没有"已提交"的行,这意味着:
SCRIPT100
SCRIPT10000
SCRIPT10001
Run Code Online (Sandbox Code Playgroud)
谢谢.
这awk可以完成这项工作:
awk -v s='Submitted' '$1 != s{if(p != "") print p; p=$2} $1 == s{p=""}' file
SCRIPT100
SCRIPT10000
SCRIPT10001
Run Code Online (Sandbox Code Playgroud)
参考: 有效的 AWK 编程