如何从日志文件中选择/过滤2行依赖关系的内容。 如果当前行中的“ pattern1”后面紧跟着下一行“ pattern2”,我需要从日志文件中过滤掉内容?
示例:第1至7行
18.07.19 23.44.01 APP1 CHECK SRBR 820224 APPUSER 12
18.07.19 23.44.01 APP1 DATABASE ERROR ------> PROGRAM FAILURE APPUSER 866
18.07.19 23.44.01 APP1 OPTI-LOCK-FORCE-ERROR SITUATION A
18.07.19 23.44.01 APP1 CHECK SRBR 820224
18.07.19 23.44.01 APP1 DATABASE ERROR ------> PROGRAM FAILURE
18.07.19 23.44.01 APP1 CHECK SRBR 820224
18.07.19 23.44.01 APP1 ROLLBACK
如果发生
DATABASE ERROR ------> PROGRAM FAILURE
在当前行中后跟内容
OPTI-LOCK-FORCE-ERROR SITUATION
在下一行那么我想过滤掉这两条线。
我需要知道DATABASE ERROR ------> PROGRAM FAILURE
或OPTI-LOCK-FORCE-ERROR SITUATION
的单个事件。
如果我使用
sed -n '/DATABASE ERROR ------> PROGRAM FAILURE/,/OPTI-LOCK-FORCE-ERROR/!p'
示例中的第5行也被滤除
哪种语法/工具可以支持此功能,我更喜欢grep,sed或awk。 非常感谢,Steff
答案 0 :(得分:0)
这将打印两行
awk '/OPTI-LOCK-FORCE-ERROR SITUATION/ && p~/DATABASE ERROR ------> PROGRAM FAILURE APPUSER/ {print $0"\n"p} {p=$0}'
18.07.19 23.44.01 APP1 OPTI-LOCK-FORCE-ERROR SITUATION A
18.07.19 23.44.01 APP1 DATABASE ERROR ------> PROGRAM FAILURE APPUSER 866
它测试行是否为OPTI-LOCK....
,前一行是否为DATABASE...
并同时打印两者。
答案 1 :(得分:0)
这可能对您有用(GNU sed):
sed '/DATABASE ERROR ------> PROGRAM FAILURE/{N;/OPTI-LOCK-FORCE-ERROR/d;P;D}' file
如果当前行包含DATABASE ERROR ------> PROGRAM FAILURE
,则添加下一行;如果当前行包含OPTI-LOCK-FORCE-ERROR
,则将两者都删除,否则打印/删除第一行并重复。