gpt4 book ai didi

apache - 快速处理apache日志

转载 作者:行者123 更新时间:2023-12-04 13:12:33 29 4
gpt4 key购买 nike

我当前正在运行awk脚本来处理较大的(8.1GB)访问日志文件,并且要花很长时间才能完成。在20分钟内,它写入了我期望写入的(1000 +-500)MB中的14MB,我想知道是否可以以某种方式更快地处理它。

这是awk脚本:

#!/bin/bash

awk'{t = $ 4“” $ 5; gsub(“[\[\]\/]”,“”,t); sub(“:”,“”,t); printf(“%s,”,$ 1); system(“date -d\”“t”\“+%s”);}'$ 1


编辑:

对于不习惯的人,脚本会读取每一行,获取日期信息,将其修改为date实用程序可识别的格式,然后调用该格式以将日期表示为自1970年以来的秒数,最后将其返回为.csv行。文件以及IP。

输入示例: 189.5.56.113--[22/Jan/2010:05:54:55 +0100]“GET(...)”

返回的输出: 189.5.56.113,124237889

最佳答案

@OP,您的脚本运行缓慢,主要是由于对该文件中的每一行以及它的大文件(以GB为单位)的系统日期命令的调用过多。如果您有gawk,请使用其内部的mktime()命令进行日期到时代秒的转换

awk 'BEGIN{
m=split("Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec",d,"|")
for(o=1;o<=m;o++){
date[d[o]]=sprintf("%02d",o)
}
}
{
gsub(/\[/,"",$4); gsub(":","/",$4); gsub(/\]/,"",$5)
n=split($4, DATE,"/")
day=DATE[1]
mth=DATE[2]
year=DATE[3]
hr=DATE[4]
min=DATE[5]
sec=DATE[6]
MKTIME= mktime(year" "date[mth]" "day" "hr" "min" "sec)
print $1,MKTIME

}' file

输出
$ more file
189.5.56.113 - - [22/Jan/2010:05:54:55 +0100] "GET (...)"
$ ./shell.sh
189.5.56.113 1264110895

关于apache - 快速处理apache日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2114958/

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