最近兩天嘗試用python代替bash寫Linux?Shell腳本來統計日志。發現python寫起來比bash更簡單和容易閱讀,發現不少驚喜。所以寫了一個粗糙的腳本來統計日志。
目標
1、通過簡單命令和腳本統計事件發生數
2、日志限定文本類型
假定環境
日志文件:1.log
test:aaa,1
test:bbc,1
test:bbc,2
test:bba,2
test:baa,3
test:baa,1
other1:xx,bb,3
other2:32
日志文件:2.log
test:ab,2
other3:123
統計腳本
log_static.py
統計腳本
1 #!/usr/bin/python2 importsys3 #1st arg for tag key4 key="test:"iflen(sys.argv)>2;elsesys.argv[1]5 #2nd arg for split signal6 split=","iflen(sys.argv)>3elsesys.argv[2]7 #3rd arg for static index8 stat_idx=0iflen(sys.argv)>4elseint(sys.argv[3])9 key_map={}10 #loop for read11 whileTrue:12 #reading line from piple13 line=sys.stdin.readline()14 line=line[:-1]ifline.endswith("\n")elseline15 iflen(line)==0:16 break17 #find current key to static18 cur_key=line.split(key)[1].split(split)[stat_idx]19 #update static20 key_map[cur_key]=key_map[cur_key]+1if(key_map.has_key(cur_key))else121 22 #sort the map23 result=sorted(key_map.items(),lambdax,y: cmp(y[1],x[1]))24 #print out25 forkey,valueinresult:26 print"%s,%s"%(key,value)
運行
添加執行權限:chmod + log_static.py
選擇關鍵標簽"test:",日志值分隔符為","
統計第一位發生次數:grep "test" *.log | ./log_static.py test: , 0 > 1.cvs
統計第二位發生次數:grep "test" *.log | ./log_static.py test: , 1 > 2.cvs
結果
統計文件:1.cvs
bbc,2
baa,2
ab,1
aaa,1
bba,1
統計文件:2.cvs
1,3
2,3
3,1
備注
#!/usr/bin/python python庫引用
import sys 導入系統組建
sys.argv 調用參數
target = value 1 if (statement) else value2 相當于target =?statement ? value 1 : value2
python的通過縮進判斷分塊,沒有結束符號
while (statement) True:
#code here
設置arr = [1,2,3,4],arr[:-2]篩選變為[1,2] 除了篩選還可以賦值arr[0 for x in range(0, 10)]
lambda x,y : cmp(y[1], x[1]) lambda運算,表述傳入參數x,y?返回y[1]和x[1]的比較值(倒序)
for x,y in list 表示枚舉list的每一項(item),其中x取值item[0],y取值item[1]
print "%s,%s" % (x,y) 格式化打印,%s代表該位置的字符串類型