Shell 如何从db2错误日志中grep下面的sql部分
我有一个从db2diag.log中提取错误消息的脚本。我必须从下面的文件中提取导致死锁的SQL查询 文件内容:Shell 如何从db2错误日志中grep下面的sql部分,shell,awk,sed,grep,aix,Shell,Awk,Sed,Grep,Aix,我有一个从db2diag.log中提取错误消息的脚本。我必须从下面的文件中提取导致死锁的SQL查询 文件内容:log.txt db2inst1 , WSCOMUSR , MESSAGE : ADM5501I DB2 is performing lock escalation. The affected application is named "db2jcc_application", and is associated with the workload
log.txt
db2inst1 , WSCOMUSR , MESSAGE : ADM5501I DB2 is performing lock escalation. The affected application
is named "db2jcc_application", and is associated with the workload
name "SYSDEFAULTUSERWORKLOAD" and application ID
"173.10.105.33.59586.13011817552" at member "0". The total number of
locks currently held is "1249935", and the target number of locks to
hold is "624967". The current statement being executed is "delete
from DMEXPLOG where CREATED < ? ". Reason code "1"
db2inst1 , WSCOMUSR , MESSAGE : ADM5501I DB2 is performing lock escalation. The affected application
is named "db2jcc_application", and is associated with the workload
name "SYSDEFAULTUSERWORKLOAD" and application ID
"173.10.105.33.59586.13011817552" at member "0". The total number of
locks currently held is "1249935", and the target number of locks to
hold is "624967". The current statement being executed is "select
* from DMEXPLOG where CREATED < ?". Reason code "1"
db2inst1,WSCOMUSR,消息:ADM5501I DB2正在执行锁升级。受影响的应用程序
名为“db2jcc_应用程序”,并与工作负载关联
名称“SYSDEFAULTUSERWORKLOAD”和应用程序ID
成员“0”处的“173.10.105.33.59586.13011817552”。总数
当前持有的锁数为“1249935”,目标持有的锁数为
等待是“624967”。正在执行的当前语句是“delete”
从创建的DMEXPLOG开始<?”。原因代码“1”
db2inst1,WSCOMUSR,消息:ADM5501I DB2正在执行锁升级。受影响的应用程序
名为“db2jcc_应用程序”,并与工作负载关联
名称“SYSDEFAULTUSERWORKLOAD”和应用程序ID
成员“0”处的“173.10.105.33.59586.13011817552”。总数
当前持有的锁数为“1249935”,目标持有的锁数为
等待是“624967”。正在执行的当前语句是“select”
*从创建的DMEXPLOG开始<?”。原因代码“1”
所需输出:所有sql查询
1. delete
from DMEXPLOG where CREATED < ?
2. select
* from DMEXPLOG where CREATED < ?
1。删除
从创建位置的DMEXPLOG<?
2.挑选
*从创建位置的DMEXPLOG<?
像这样。我想要文件中的所有sql部分。是否有任何grep
或Awk/sed
解决方案可以获得所需的输出
平台:Unix(AIX)awk'{gsub(/^..*)正在执行的当前语句是\“| \”。原因代码。*$/,”;打印编号“$0}”log.txt
1.从创建的DMEXPLOG中删除<?
2.
3.从创建的DMEXPLOG中选择*?
毫无疑问,匹配的字符串可以更短,也可以是2。是空的,因为您显示的数据在实际数据之间有一条空行。实际数据中是否有空行?也许,这对您有所帮助
user@host:/tmp$ sed -n '/select/,/^$/p;/delete/,/^$/p;/insert/,/^$/p;/update/,/^$/p' log.txt | sed -n '/^[0-9]/!H;//x;$x;s/\n\([^A]\)/ \1/gp' | awk -F'"' '{printf("%d.\t %s\n", NR, $4)}'
1. delete from DMEXPLOG where CREATED < ?
2. select * from DMEXPLOG where CREATED < ?
user@host:/tmp$sed-n'/select/,/^$/p/删除/,/^$/p/插入/,/^$/p/更新/,/^$/p'log.txt | sed-n'/^[0-9]/!H//x$x;s/\n \([^A]\)/\1/gp'| awk-F''{printf(“%d.\t%s\n”,NR,$4)}'
1.从创建的DMEXPLOG中删除<?
2.从创建的DMEXPLOG中选择*?
您当前的示例可以用
sed -n '/statement being executed/ s/.*"//p; /Reason code/ s/".*//p' log
sed -n '/statement being executed/ s/.*"//p; /Reason code/ s/".*//p' log