bash中的多行模式匹配
发布时间:2020-12-15 17:00:02 所属栏目:安全 来源:网络整理
导读:我有一个类型的长文件 Processin SCRIPT10 file..Submitted batch job 1715572Processin SCRIPT100 file..Processin SCRIPT1000 file..Submitted batch job 1715574Processin SCRIPT10000 file..Processin SCRIPT10001 file..Processin SCRIPT10002 file..Su
我有一个类型的长文件
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线.你能告诉我一个更好的单班车吗? 理想情况下,输出将只是下一行(或只是脚本名称)上没有“已提交”的行,这意味着: 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |