如何将Squid代理日志中的日期转换为epoch时间戳?
Squid日志日期转Epoch时间戳解决方案
效果说明
可直接将日志开头[Wed Nov 17 17:00:00 2021].014格式的时间转换为1637139600.014格式,完整保留后续日志内容,符合webalizer等工具的导入要求。
GNU/Linux 环境操作
单条日志测试
直接复制以下命令运行,可验证转换效果:
echo '[Wed Nov 17 17:00:00 2021].014 1786 10.107.54.55 TCP_TUNNEL/200 3964 CONNECT website.1.com:443 - HIER_DIRECT/104.43.65.221 -' | awk '{ date_str = substr($0, 2, index($0, "]") - 2) cmd = "date -d \"" date_str "\" +%s" cmd | getline epoch close(cmd) sub(/^\[.*\]/, epoch) print }'
批量处理日志文件
将命令中的squid.log替换为你的实际日志文件名,转换完成后结果会输出到squid_epoch.log:
awk '{ date_str = substr($0, 2, index($0, "]") - 2) cmd = "date -d \"" date_str "\" +%s" cmd | getline epoch close(cmd) sub(/^\[.*\]/, epoch) print }' squid.log > squid_epoch.log
macOS/BSD 环境操作
仅需替换date命令参数即可,批量处理命令如下:
awk '{ date_str = substr($0, 2, index($0, "]") - 2) cmd = "date -j -f \"%a %b %d %T %Y\" \"" date_str "\" +%s" cmd | getline epoch close(cmd) sub(/^\[.*\]/, epoch) print }' squid.log > squid_epoch.log
大日志量优化方案
如果日志行数超过10万行,上述逐行调用date命令的方式速度较慢,可使用gawk内置时间函数处理,效率提升10倍以上:
gawk '{ date_str = substr($0, 2, index($0, "]") - 2) epoch = mktime(strptime(date_str, "%a %b %d %H:%M:%S %Y")) sub(/^\[.*\]/, epoch) print }' squid.log > squid_epoch.log
内容的提问来源于stack exchange,提问作者YBLAW
相关产品推荐
相关产品推荐

