当前位置: 技术问答>linux和unix
请教:如何用shell实现指定log文件(比如a.log)中的指定内容(SQL_ID和SQL的处理部分)的收集
来源: 互联网 发布时间:2016-09-15
本文导语: 目的:收集指定Log文件里会多次出现以下的SQL_ID和SQL的处理部分并且统计各个SQL_ID和SQL的处理部分的出现次数。 (例:指定Log文件的一部分) SQL_ID 0saby2c3v1z0u, child number 0 ------------------------------------- -- SELECT /*...
目的:收集指定Log文件里会多次出现以下的SQL_ID和SQL的处理部分并且统计各个SQL_ID和SQL的处理部分的出现次数。
(例:指定Log文件的一部分)
SQL_ID 0saby2c3v1z0u, child number 0
-------------------------------------
-- SELECT /* rn.kdbs.action.search.pre.CompanyAction#index */ DBMS_RANDOM.VALUE RANDOM
上面的例子里SQL_ID=0saby2c3v1z0u、SQL的处理部分rn.kdbs.action.search.pre.CompanyAction#index
其中SQL_ID 规定是13位, SQL的处理部分形式也一定是 SELECT /* SQL的处理部分*/ 。而且SQL的处理部分的行一定在SQL_ID的下面两行比如某SQL_ID是100行,那该SQL_ID对应的处理部分肯定出现在102行。
指定Log文件里,一个SQL_ID和SQL的处理部分可能出现1次,也可能重复多次出现。
最终我希望把各个SQL_ID和该SQL的处理部分,以及它们出现的次数用以下的方式输出。
具体输出成txt文件还是csv文件还没考虑好。(好像生成csv文件比较麻烦)
(输出例)
Action名 SQL_ID 回数
rn.kdbs.action.search.pre.CompanyAction1#index 0saby2c3v1z0u 100
rn.kdbs.action.search.pre.CompanyAction2#index 0saby2c3v2z0u 101
rn.kdbs.action.search.pre.CompanyAction3#index 0saby2c3v3z0u 200
rn.kdbs.action.search.pre.CompanyAction4#index 0saby2c3v4z0u 201
rn.kdbs.action.search.pre.CompanyAction5#index 0saby2c3v5z0u 1
望有人能帮忙给出具体的实现,本人感激不尽。
(例:指定Log文件的一部分)
SQL_ID 0saby2c3v1z0u, child number 0
-------------------------------------
-- SELECT /* rn.kdbs.action.search.pre.CompanyAction#index */ DBMS_RANDOM.VALUE RANDOM
上面的例子里SQL_ID=0saby2c3v1z0u、SQL的处理部分rn.kdbs.action.search.pre.CompanyAction#index
其中SQL_ID 规定是13位, SQL的处理部分形式也一定是 SELECT /* SQL的处理部分*/ 。而且SQL的处理部分的行一定在SQL_ID的下面两行比如某SQL_ID是100行,那该SQL_ID对应的处理部分肯定出现在102行。
指定Log文件里,一个SQL_ID和SQL的处理部分可能出现1次,也可能重复多次出现。
最终我希望把各个SQL_ID和该SQL的处理部分,以及它们出现的次数用以下的方式输出。
具体输出成txt文件还是csv文件还没考虑好。(好像生成csv文件比较麻烦)
(输出例)
Action名 SQL_ID 回数
rn.kdbs.action.search.pre.CompanyAction1#index 0saby2c3v1z0u 100
rn.kdbs.action.search.pre.CompanyAction2#index 0saby2c3v2z0u 101
rn.kdbs.action.search.pre.CompanyAction3#index 0saby2c3v3z0u 200
rn.kdbs.action.search.pre.CompanyAction4#index 0saby2c3v4z0u 201
rn.kdbs.action.search.pre.CompanyAction5#index 0saby2c3v5z0u 1
望有人能帮忙给出具体的实现,本人感激不尽。
|
用awk来实现:
1.把上面内容存到file1.awk
2.chmod u+x file1.awk //保证有执行权限
3.awk -f file1.awk test //test是你的文件
输出类似:
!/bin/awk -f
{
if($0 ~ /^SQL_ID/)
{
key=$2;getline;getline l;
split(l,pat,//*/);
split(pat[2],tmp,/*//);
#print tmp[1];
key=sprintf("%s%s",key,tmp[1]);x[key]++;
}
}
END{
for(i in x)
printf("%s %dn",i,x[i]);
}
1.把上面内容存到file1.awk
2.chmod u+x file1.awk //保证有执行权限
3.awk -f file1.awk test //test是你的文件
输出类似:
0saby2c3v1z0u, rn.kdbs.action.search.pre.CompanyAction#index 4
0saby2c3v1t0u, tn.kdbs.action.search.pre.CompanyAction#index 2