我有一个类型为
的长文件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
感谢。
答案 0 :(得分:3)
这个awk
可以胜任:
awk -v s='Submitted' '$1 != s{if(p != "") print p; p=$2} $1 == s{p=""}' file
SCRIPT100
SCRIPT10000
SCRIPT10001
答案 1 :(得分:0)
不使用awk
,您可以编写一个bash命令/文件并运行它。如果您对awk
的了解较少,那么如果您想进一步自定义,则此bash脚本的效果会更好。
#!/bin/bash
tempText=""
Processing="Processin"
while read line
do
tempText=$line
if [[ "$line" == Processin* ]];
tempText=$line
then
read line
if [[ "$line" != Submitted* ]];
then
echo $tempText
tempText=$line
while read line
do
if [[ "$line" != Submitted* ]];
then
echo $tempText
tempText=$line
else
break
fi
done
fi
fi
使用./check.sh filename
目前的答案很好。