gpt4 book ai didi

apache - 如何按月拆分现有的 apache 日志文件?

转载 作者:行者123 更新时间:2023-12-04 06:22:57 27 4
gpt4 key购买 nike

如何按月将现有的 apache 日志文件拆分为单独的文件?

我已经在网上搜索过,但找不到任何东西。是的,我知道 logrotate 和 cronolog 等等。但是我发现的任何内容都无法帮助我拆分现有文件。

有 awk 脚本之类的吗?

这是数据的一个片段:

124.115.5.11 - - [30/May/2011:23:21:37 -0500] "GET / HTTP/1.0" 200 206492 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322;TencentTraveler)"
58.61.164.39 - - [31/May/2011:00:36:35 -0500] "GET / HTTP/1.0" 200 206492 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322;TencentTraveler)"
114.80.93.55 - - [31/May/2011:01:42:17 -0500] "GET / HTTP/1.0" 200 206492 "-" "Sosospider+(+http://help.soso.com/webspider.htm)"
114.80.93.73 - - [31/May/2011:02:03:44 -0500] "GET / HTTP/1.0" 200 206492 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322;TencentTraveler)"
123.125.71.98 - - [31/May/2011:12:33:30 -0500] "GET / HTTP/1.1" 103 24576 "-" "Baiduspider+(+http://www.baidu.com/search/spider.htm)"
220.181.108.187 - - [31/May/2011:12:33:55 -0500] "GET / HTTP/1.1" 103 24576 "-" "Baiduspider+(+http://www.baidu.com/search/spider.htm)"
123.125.71.117 - - [31/May/2011:13:27:56 -0500] "GET / HTTP/1.1" 103 24576 "-" "Baiduspider+(+http://www.baidu.com/search/spider.htm)"
123.125.71.78 - - [31/May/2011:16:45:48 -0500] "GET /node/54 HTTP/1.1" 200 3219 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)"
124.115.1.8 - - [31/May/2011:19:59:58 -0500] "GET / HTTP/1.1" 200 206492 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
123.125.71.69 - - [31/May/2011:22:05:46 -0500] "GET / HTTP/1.1" 200 206492 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)"

这是我的解决方案,深受史蒂夫以下回答的启发:

使用 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 接受的答案为 70 秒 在 3.4 GHz 8 核 Xeon E31270 上,而这种方法需要 5 秒 .

原创灵感: https://stackoverflow.com/a/11714105/430062

最佳答案

使用 awk 的一种方式:

awk '{ split($4,array,"/"); print > array[2] ".txt" }' file.txt

这将输出如下文件:
May.txt
June.txt
July.txt
etc

编辑:

也许您想将年份分开:
awk '{ split($4,array,"[:/]"); print > array[2] array[3] ".txt" }' file.txt

这将输出如下文件:
May2011.txt
May2012.txt
July2011.txt
etc

关于apache - 如何按月拆分现有的 apache 日志文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11713978/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com