【awk】按小時切割日誌

曲珂發表於2017-05-23

需求:

把日誌按日誌內容中的小時數做切割

{hostname=ali-beijing-msync-3512} 2017-05-17 23:17:52.694 [info] <0.27292.7053>@msync_c2s_lib:delete_pb_jid_entry:266  delete pb jid {'JID',<<"17zuoye">>
{hostname=ali-beijing-msync-3513} 2017-05-17 23:17:52.694 [info] <0.27292.7053>@msync_c2s_lib:delete_socket_entry:164  delete socket #Port<0.34411764>  

這種字元處理的工作非sed,awk莫屬了

下面是我用awk完成的單行程式碼

1 awk --re-interval 
2     '/^\{[^ ]+\} [0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}/{    # 一定要清楚的知道正常的日誌是什麼樣子,因為日誌中不排除有異常棧之類的錯誤資訊,這就導致awk異常
3         fn=gensub(/[^ ]+ ([0-9]{4})-([0-9]{2})-([0-9]{2}) ([0-9]{2}):[0-9]{2}:[0-9]{2}\.[0-9]+ .*/,"\\1\\2\\3\\4","g");    #gensub提取你需要的資訊
4         if(fn != lastdate){
5             if(lastdate != "") close(outfile)    #及時關閉上一個檔案
6         };
7         lastdate=fn;
8         outfile=sprintf("ejabberd-login-log_%s",fn);    #你需要生成的日誌檔名
9         print >> outfile}'

 

  

相關文章