如何按小时分割apache

时间:2014-12-30 11:53:40

标签: apache logging awk

我有一个30Gb的apache日志文件.Ex:

10.16.131.126 - xxxxx [30/Sep/2014:11:27:20 +0800] "PROPFIND /svn/atlas/!svn/vcc/default HTTP/1.1" 207 404 "-" "SVN/1.6.11 (r934486) neon/0.25.5"
10.16.131.126 - xxxxxx [30/Sep/2014:11:27:20 +0800] "PROPFIND /svn/atlas/!svn/vcc/default HTTP/1.1" 207 404 "-" "SVN/1.6.11 (r934486) neon/0.25.5"
10.16.131.126 - xxxxx [30/Sep/2014:11:27:20 +0800] "PROPFIND /svn/atlas/!svn/vcc/default HTTP/1.1" 207 404 "-" "SVN/1.6.11 (r934486) neon/0.25.5" 

我想用awk将这个日志文件拆分几个小时。我有一个方法,但我认为这是愚蠢的。这个方法是:

awk '$4~/[0-9][0-9][/][A-Z][a-z][a-z][/][0-9]+[:]01/' $1  > /data/log_analysis/log_data/$day_time/01.log)
awk '$4~/[0-9][0-9][/][A-Z][a-z][a-z][/][0-9]+[:]02/' $1  > /data/log_analysis/log_data/$day_time/02.log)
awk '$4~/[0-9][0-9][/][A-Z][a-z][a-z][/][0-9]+[:]03/' $1  > /data/log_analysis/log_data/$day_time/03.log)
.....

你有更好的方法来解决这个问题吗?谢谢!

1 个答案:

答案 0 :(得分:2)

您可以使用split函数来解析日期,然后重定向到相应的文件:

awk '{split($4, a, ":"); print > "out." a[2]}' file