仅当模式位于模式

时间:2017-07-12 18:57:07

标签: awk

我有一个应用程序日志,它有一些请求和响应,并且在一些sql查询之间。我想找到请求请求行后跟一个超过特定时间的sql,例如我有以下日志片段,我想要一个awk oneliner吐出以下行 - 它找到一个请求导致一个sql运行时间超过1秒。

11:01:19:518 FfsFrm_Test_Buffer 20

log snippet-

11:01:19:518 FfsFrm_View_Buffer 20
INPUT缓冲区如下

11:01:19:549 DBA 10
SQL执行于:0.004383秒

11:01:19:549 DBA 20
为语句' 24'

获取CursorPoolItem

11:01:19:549 ODA 20
计算的OCI缓冲区大小为3516

11:01:19:549 DBA 20
获取CursorPoolItem以获取语句' 25'以前用于声明' 24'

11:01:19:549 DBA 20
SELECT字段,表中的field2 WHERE STGS_ID =:bvC2W绑定值:AMS52 |

11:01:19:549 DBA 10
SQL执行:0.00125秒 OUTPUT缓冲区如下

11:01:19:518 FfsFrm_View_Buffer 20
INPUT缓冲区如下

11:01:19:549 DBA 10
SQL执行于:0.004383秒

11:01:19:549 DBA 20
为语句' 24'

获取CursorPoolItem

11:01:19:549 ODA 20
计算的OCI缓冲区大小为3516

11:01:19:549 DBA 20
获取CursorPoolItem以获取语句' 25'以前用于声明' 24'

11:01:19:549 DBA 20
SELECT字段,表中的field2 WHERE STGS_ID =:bvC2W绑定值:AMS52 |

11:01:19:549 DBA 10
SQL执行:0.00125秒 OUTPUT缓冲区如下

11:01:19:518 FfsFrm_Correct_Buffer 20
INPUT缓冲区如下

11:01:19:549 DBA 10
SQL执行于:0.004383秒

11:01:19:549 DBA 20
为语句' 24'

获取CursorPoolItem

11:01:19:549 ODA 20
计算的OCI缓冲区大小为3516

11:01:19:549 DBA 20
获取CursorPoolItem以获取语句' 25'以前用于声明' 24'

11:01:19:549 DBA 20
SELECT字段,表中的field2 WHERE STGS_ID =:bvC2W绑定值:AMS52 |

11:01:19:549 DBA 10
SQL执行:0.00125秒 OUTPUT缓冲区如下

11:01:19:518 FfsFrm_Test_Buffer 20
INPUT缓冲区如下

11:01:19:549 DBA 10
SQL执行:1.004383秒

11:01:19:549 DBA 20
为语句' 24'

获取CursorPoolItem

11:01:19:549 ODA 20
计算的OCI缓冲区大小为3516

11:01:19:549 DBA 20
获取CursorPoolItem以获取语句' 25'以前用于声明' 24'

11:01:19:549 DBA 20
SELECT字段,表中的field2 WHERE STGS_ID =:bvC2W绑定值:AMS52 |

11:01:19:549 DBA 10
SQL执行:0.00125秒 OUTPUT缓冲区如下

1 个答案:

答案 0 :(得分:-1)

我想我得到了这样的

awk'/ _Buffer / {req = $ 0} / SQL执行于:/&& 4美元> 1 {print req}'test.log

查找pattern1和pattern2,找到第一个模式时将行保存到req,最后打印。