加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 按日期使用命令行工具拆分access.log文件

发布时间:2020-12-15 19:09:04 所属栏目:安全 来源:网络整理
导读:我有一个Apache access.log文件,大小在35GB左右。通过它浏览不再是一个选择,没有等待很多。 我想把它分割成许多小文件,通过使用日期作为分割标准。 日期格式为“[15 / Oct / 2011:12:02:02 0000]”。任何想法我该怎么做只使用bash脚本,标准文本处理程
我有一个Apache access.log文件,大小在35GB左右。通过它浏览不再是一个选择,没有等待很多。

我想把它分割成许多小文件,通过使用日期作为分割标准。

日期格式为“[15 / Oct / 2011:12:02:02 0000]”。任何想法我该怎么做只使用bash脚本,标准文本处理程序(grep,awk,sed和喜欢),管道和重定向?

输入文件名是access.log。我希望输出文件有格式,如access.apache.15_Oct_2011.log(这将是诀窍,虽然不太好,当排序..)

使用awk的一种方式:
awk 'BEGIN {
    split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec ",months," ")
    for (a = 1; a <= 12; a++)
        m[months[a]] = a
}
{
    split($4,array,"[:/]");
    year = array[3]
    month = sprintf("%02d",m[array[2]])

    print > FILENAME"-"year"_"month".txt"
}' incendiary.ws-2009

这将输出如下文件:

incendiary.ws-2010-2010_04.txt
incendiary.ws-2010-2010_05.txt
incendiary.ws-2010-2010_06.txt
incendiary.ws-2010-2010_07.txt

对于150 MB的日志文件,Chepner的答案在3.4 GHz 8 Core Xeon E31270上花费了70秒,而这种方法花了5秒钟。

原创灵感:“How to split existing apache logfile by month?”

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读