【awk】按小时切割日志

需求:

把日志按日志内容中的小时数做切割

{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完成的单行代码

 awk --re-interval
'/^\{[^ ]+\} [0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}/{ # 一定要清楚的知道正常的日志是什么样子,因为日志中不排除有异常栈之类的错误信息,这就导致awk异常
fn=gensub(/[^ ]+ ([-]{})-([-]{})-([-]{}) ([-]{}):[-]{}:[-]{}\.[-]+ .*/,"\\1\\2\\3\\4","g"); #gensub提取你需要的信息
if(fn != lastdate){
if(lastdate != "") close(outfile) #及时关闭上一个文件
};
lastdate=fn;
outfile=sprintf("ejabberd-login-log_%s",fn); #你需要生成的日志文件名
print >> outfile}'

  

上一篇:JQuery+AJax - 无刷新使用验证码


下一篇:09 Command Documentation 命令文档