grep
也不是最好的工作,因为它不能读取多行。您可以使用 -B1 成对阅读它们,但您仍然需要使用更强大的工具(例如或其他工具sed
)来解析它们。awk
这是另一种方法,以防万一您在行前遇到外来线(在echo
那里只是为了让您可以空运行它):
$ echo 'Before starting transaction id = 123
After starting transaction id = 123
After starting transaction id = 54675
Before starting transaction id = 567
After starting transaction id = 567' |
sort -k6 | uniq -u -f5 # end cmd
After starting transaction id = 54675
它通过仅检查唯一 ID 来工作。由于我不知道你在那里获得什么样的内容,也许它们是现有条目的重复,在这种情况下你必须以不同的方式做。这是更安全的方法,它捕获这两种情况并返回 ID 频率大于或小于 2 的事件:
$ echo 'Before starting transaction id = 123
After starting transaction id = 123
After starting transaction id = 567
Before starting transaction id = 567
After starting transaction id = 567' |
sort -k6 | uniq -c -f5 | grep -v "^[[:space:]]*2[[:space:]]"
3 After starting transaction id = 567