【问题标题】:how to split apache log by hour如何按小时拆分apache日志
【发布时间】:2015-02-26 14:11:53
【问题描述】:

我有一个 30Gb 的 apache 日志文件。例如:

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)
.....

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

【问题讨论】:

    标签: apache logging awk


    【解决方案1】:

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

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

    【讨论】:

    • 干得好!我在想match() 这样的东西,但这更干净更漂亮。
    猜你喜欢
    • 2014-02-17
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    • 2010-09-19
    • 2014-05-02
    • 2020-05-21
    • 1970-01-01
    • 2015-08-08
    相关资源
    最近更新 更多