仅当下一行不包含特定匹配项时才打印一行

Pat*_*ler 12 grep sed awk

我正在尝试在日志文件中搜索未完成的已记录活动。例如,我记录了“ID 1234 的开始活动...”,如果成功,下一行将是“活动 1234 已完成”。

我正在尝试获取“开始...”行,这些行后面没有跟相应的“已完成”行。

示例日志文件

Starting activity for ID 1234
ID 1234 completed successfully
Starting activity for ID 3423
ID 3423 completed successfully
Starting activity for ID 9876
ID 9876 completed successfully
Starting activity for ID 99889
ID 99889 completed successfully
Starting activity for ID 10011
ID 10011 completed successfully
Starting activity for ID 33367
Starting activity for ID 936819
ID 936819 completed successfully
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我会寻找输出:

Starting activity for ID 33367
Run Code Online (Sandbox Code Playgroud)

...因为它后面没有“完成”的行。

我试过用grepand来做这件事awk,但没有取得太大的成功。我假设可以使用其中一种工具来完成,但我的grepawk排骨并不先进。

寻找一种快速可靠的grepawk模式来提供我需要的结果。

Tho*_*hor 10

这是一个awk替代方案:

awk '
  /^Starting/ { I[$5] = $0                  }
  /^ID/       { delete I[$2]                }
  END         { for (key in I) print I[key] }
' infile
Run Code Online (Sandbox Code Playgroud)

输出:

awk '
  /^Starting/ { I[$5] = $0                  }
  /^ID/       { delete I[$2]                }
  END         { for (key in I) print I[key] }
' infile
Run Code Online (Sandbox Code Playgroud)

I关联数组跟踪的IDS已经看到的。