有人在論壇 上問 將日誌格式化的方法,
剛好學python,就拿這個練手了:
09:55:54: error1 /tmp/error/log.3 50 times
mon jun 28 00:00:53 2009
09:55:54: error1 /tmp/error/log.3 50 times
09:56:09: error1 /tmp/error/log.14 50 times
10:56:12: error1 /tmp/error/log.14 100 times
10:56:23: error2 /tmp/error/log.5 50 times
11:56:26: error2 /tmp/error/log.1 50 times
11:56:27: error2 /tmp/error/log.5 100 times
mon jun 29 00:00:53 2009
15:56:29: error3 /tmp/error/log.1 100 times
15:56:32: error3 /tmp/error/log.1 150 times
16:56:33: error4 /tmp/error/log.6 50 times
16:56:36: error4 /tmp/error/log.6 100 times
16:56:40: error4 /tmp/error/log.12 50 times
mon jun 30 00:00:53 2009
格式化成:
2009|jun|28|10|error1|1
2009|jun|28|10|error2|1
2009|jun|29|16|error4|3
2009|jun|29|15|error3|2
python 源**:
#!/usr/bin/env python
importre
importsys
defformat_log(logf):
re_hour = re.compile(r'^/d/d:')
re_sp_split = re.compile(r'/s+')
#extract the day from time line
make_day =lambdad:d[4] + '|'+ d[1]+ '|'+ d[2]
make_key =lambdad,c:d + '|'+ c[0][0:2] + '|'+ c[1]
cur_day = 'n/a|n/a|n/a'
log_cnt=dict()
forlineinlogf:
m = re_hour.match(line)
cols = re_sp_split.split(line)
iflen(cols) < 3: #not a valid log
continue
ifmisnotnone: #this is log line ,not date
key = make_key(cur_day, cols)
#date | hour | err_type
ifkeynotinlog_cnt:
log_cnt[key] = 1
else:
log_cnt[key] += 1
else:
iflen(cols) < 5: #not a valid log
continue
cur_day=make_day(cols)
sorted_key = log_cnt.keys()
sorted_key.sort()
forkeyinsorted_key:
print'%s|%d'% (key, log_cnt[key])
if__name__ == '__main__':
format_log(sys.stdin)
python 比較易懂,這點比perl 要好多了。
上邊的**,即使不會python的人也能看懂60%
第乙個python 程式
有人在論壇 上問 將日誌格式化的方法,剛好學python,就拿這個練手了 09 55 54 error1 tmp error log.3 50 times mon jun 28 00 00 53 2009 09 55 54 error1 tmp error log.3 50 times 09 56 ...
第乙個python程式
在之前學習了基本的python知識以後,我決定編寫自己的第乙個python程式。可汗學院公開課 全部 根據以上兩個內容為基礎,編寫乙個爬取 源 的python程式,中間一步步來,終極目標是實現 rss 那樣的新聞聚合功能。這個想法我已經想了快半個月了,可是一直遲遲沒有實現,正好趁這個機會。準備開始像...
第乙個Python程式
本節內容如下 python程式的乙個很大的特點就是簡潔,像編寫其他程式,輸出乙個 hello world 需要寫好幾行 什麼導入庫,呼叫輸出函式等等。然而,python的 hello world 在命令列輸出可以非常簡單,輸入乙個 hello world 回車,直接可以列印結果。實現步驟如下 1.開...