寫了個分析library_cache dump的AWK,有興趣的可以搞搞
昨天無聊寫的,AWK偶只是會,不精通,寫的東西也比較爛
基於level 16的library_cache dump。發現其依賴關係。
沒什麼實際意義,只是想練習下AWK
輸出大概是這樣的
*******************************************************************************************
25ca5a80 CRSR SELECT * FROM V$SQLAREA WHERE SQL_TEXT LIKE '%smal
1--"25cf9d68","CRSR","CHILD_CURSOR","2","25d90710"
2--"25d90710","TABL","PUBLIC.V$SQLAREA ","2","25f03bc4"
3--"25f03bc4","TABL","SYS.V_$SQLAREA ","2","25dd9918"
4--"25dd9918","TABL","SYS.V$SQLAREA ","",""
1--"25cf9d68","CRSR","CHILD_CURSOR","2","25f03bc4"
2--"25f03bc4","TABL","SYS.V_$SQLAREA ","2","25dd9918"
3--"25dd9918","TABL","SYS.V$SQLAREA ","",""
1--"25cf9d68","CRSR","CHILD_CURSOR","2","25ce85e8"
2--"25ce85e8","TABL","CTAIS2.V$SQLAREA ","",""
#!/bin/awk
function addToArray(value,a){
if(a==1){FULLEXTARR[i]=value;i++ }
if(a==2){HANDLETEXTARR[j]=value;j++}
if(a==3){ANALYZETEXTARR[k]=value;k++}
if(a==4){FLAGARR[m]=value;m++}
}
function printDepend(handle,level){
for(y in FULLEXTARR){
split(FULLEXTARR[y],array,"\",\"");
TEMPTEXT1=array[1];TEMPTEXT2=array[5];
gsub(/\"/,"",TEMPTEXT1);gsub(/\"/,"",TEMPTEXT2)
if (handle==TEMPTEXT1){
TMP="";for (z=1;z<=level;z++){ TMP=TMP" " }
print TMP""level"--"FULLEXTARR[y];
if(TEMPTEXT2!=""){
printDepend(TEMPTEXT2,level+1);
}
}
}
}
BEGIN{
FLAG=0;#±êʶ¶ÁHANDLEµÄ¿ªÊ¼£¬0ÎÞHANDLE,1¼ÌÐø¶ÁHANDLE
SEQ="";#ÓÃÀ´Ê¶±ðÏÂÒ»ÐÐÊÇ·ñΪHANDLE
TYPE=0;
SPLIT=0;#ÓÃÓÚ±êʶ¶ÁHANDLE£¬1¿ªÊ¼¶Á£¬0½áÊø¶Á
i=1;#FULLTEXTARRÊý×é´óС
j=1;#HANDLETEXTARRÊý×é´óС
k=1;#ANALYZETEXTARRÊý×é´óС
m=1;#FLAGARRÊý¾Ý´óС
}
{
if($0~"LIBRARY OBJECT HANDLE:"){
if (SPLIT==1){
TEXT="\""HANDLE"\",\""NS"\",\""NAME"\",\"\",\"\"" ;addToArray(TEXT,1);
}
SPLIT=1
HANDLE="";NAME="";NS="";
gsub(/handle=/,"",$4);
HANDLE=$4;
}else if($0~"name="){
if(length($0)==7){ getline;NAME=$0 }else{ gsub(/ name=/,"",$0);NAME=$0 }
NAME=substr(NAME,1,50)
}else if($0~"namespace="){
split($1,array,"=");NS=array[2]
TEXT=HANDLE"\t"NS"\t"NAME;addToArray(TEXT,3);addToArray(HANDLE,4);
}else if($0~"child# table reference handle" || $0~"dependency# table reference handle position flags"){
if($0~"child# table reference handle"){ TYPE=1 } else { TYPE=2 }
if(NAME==""){ NAME="CHILD_CURSOR" }
getline;getline;
TEXT= "\""HANDLE"\",\""NS"\",\""NAME"\",\""TYPE"\",\""$4"\"";addToArray(TEXT,1);
addToArray($4,2);addToArray("HANDLE_FLAG:"$4,3);addToArray(HANDLE,4);
FLAG=1;SEQ=0; getline;
if($1==SEQ+1){
TEXT= "\""HANDLE"\",\""NS"\",\""NAME"\",\""TYPE"\",\""$4"\"";addToArray(TEXT,1);
addToArray($4,2);addToArray("HANDLE_FLAG:"$4,3);addToArray(HANDLE,4);
SEQ=SEQ+1;
}else{
FLAG=0;TYPE=0;SEQ="";SPLIT=0;
}
}else if(FLAG==1){
if(NAME==""){ NAME="CHILD_CURSOR" }
if($1==SEQ+1){
TEXT= "\""HANDLE"\",\""NS"\",\""NAME"\",\""TYPE"\",\""$4"\"";addToArray(TEXT,1);
addToArray($4,2);addToArray("HANDLE_FLAG:"$4,3);addToArray(HANDLE,4);
}else{
FLAG=0;TYPE=0;SEQ="";SPLIT=0;
}
}
}
END{
# print i;
# print j;
# print k;
# print m;
# for (x in FULLEXTARR){print FULLEXTARR[x]}
# for (x in HANDLETEXTARR){print HANDLETEXTARR[x]}
# for (x in ANALYZETEXTARR){print ANALYZETEXTARR[x]}
# for (x in FLAGARR){print FLAGARR[x]}
for(x=1;x<=m;x++){
for(y in HANDLETEXTARR){
if(FLAGARR[x] == HANDLETEXTARR[y]){
ANALYZETEXTARR[x]="";
continue;
}
}
}
for(x=1;x<=k;x++){
if(ANALYZETEXTARR[x]!="" && ANALYZETEXTARR[x]!~"HANDLE_FLAG:"){
print "*******************************************************************************************"
print ANALYZETEXTARR[x]
}else if(ANALYZETEXTARR[x]!="" && ANALYZETEXTARR[x]~"HANDLE_FLAG:"){
TEXT=ANALYZETEXTARR[x];
gsub(/HANDLE_FLAG:/,"",TEXT);
printDepend(TEXT,1);
}
}
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8242091/viewspace-624494/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 有了興趣,就能學會LinuxLinux
- HTTP總有你感興趣的HTTP
- TodoKit客戶端/服務端原始碼都放出來了,有興趣的可以看看,請求指教客戶端服務端原始碼
- 興趣愛好——IOS興趣感的磨練iOS
- CSDN免積分下載,和鬼哥的原理一樣,有興趣的可以研究
- 開發了一套程式設計師答題小程式。有興趣的可以一起開發。程式設計師
- 開源CMS 目前只完成後臺部分 不太完善 有興趣的可以一起來做這個
- 搭建Oracle GoldenGat (個人操作實驗文件,有興趣的可以照著實現下)OracleGo
- 大家有沒有興趣來參加一起寫一個最簡單的中介軟體的伺服器伺服器
- 有沒有人對郵件系統有興趣
- 有沒有興趣一起用 Go 手擼個簡版 RedisGoRedis
- win10資訊和興趣不見了怎麼辦 資訊和興趣開啟辦法Win10
- I've got it!有興趣的看過來! (3千字)Go
- 其他感興趣的程式碼庫
- Autodesk 招人了,開發顧問,感興趣的或者有推薦的人扔簡歷過來啊
- 【小結】資料庫連結db link,有興趣的看看。資料庫
- 使用awk來解析dump檔案
- 趣圖:程式碼突然又可以了,Why?
- Branding Brand:78%的iPhone擁有者對蘋果新手機不感興趣iPhone蘋果
- 漢化輔助軟體---有誰感興趣? (38字)
- 分享一個的c++寫的,模仿awk的框架類CAwkDocC++框架
- 聽說大家很感興趣瑋子的學習心得,採訪來了
- 您是否對大資料感興趣?對程式語言了不瞭解?這不零基礎可以學了大資料
- 對WebUI技術感興趣的說 (轉)WebUI
- 給對linux感興趣的初學者的文章Linux
- 2018,程式設計師生活的兩個興趣愛好程式設計師
- 9 個你可能感興趣的 ARKit 虛擬現實小專案
- 一個遊戲系統,向Banq大哥,以及感興趣的朋友請教!遊戲
- Prismatic:用機器學習分析使用者興趣只需10秒鐘機器學習
- 討論開源的財務軟體 jPOS,有興趣的朋友來談談自己的看法.
- httprunner 的 java 實現,有沒有感興趣的朋友,一起維護一下HTTPJava
- 趣圖:有時候我寫的程式碼,就是這樣子的
- 前端還能這麼玩?(女朋友生日,用前端寫了一個好玩的送給了她,高興壞了)前端
- eMarketer:Pinterest使用者對旅行產品有濃厚興趣REST
- 給對linux感興趣的初學者的文章 (轉)Linux
- 興趣愛好【演算法】演算法
- 準備轉一下學習方向,搞搞Unix了
- 雲遊戲時代要來了?七成玩家表示:並不感興趣遊戲