在bash中将apache日志日期格式转换为epoch

时间:2015-11-14 20:39:14

标签: linux bash shell centos7

我的目标是将日期从我的apache日志转换为“12 / Nov / 2015:23:28:22”格式的纪元格式。可以使用date命令完成,还是需要解析和提取信息?

3 个答案:

答案 0 :(得分:9)

似乎我的date命令在日期部分之间需要-而不是/,并且要在时间部分之间用空格分隔。所以我使用sed进行转换,如下所示:

date -d "$(echo '12/Nov/2015:23:28:22' | sed -e 's,/,-,g' -e 's,:, ,')" +"%s"

答案 1 :(得分:0)

您可以使用包dateutils

dateutils.strptime -i "%Y%m%dT%H%M%S" -f "%d.%m.%Y %H:%M:%S" "20170411T172238"

其中-i是您的输入格式,-f是输出格式

答案 2 :(得分:0)

虽然@Matthias Leuffen的https://stackoverflow.com/a/43351684/308851很有希望(它的输入和输出格式错误但是没有),对我来说-S的{​​{1}}选项只是没有工作,它没有发出剩余的日志只是打印了一堆时间戳,一个接一个,数字源源不断,所以我看了另一个解决方案。

https://groups.google.com/d/msg/comp.lang.awk/FXrz0VIvz4A/hhjQuu9gx3YJdateutils.strptime添加了strptime支持(更准确地说是gawk 4)。因此,您可以使用https://serverfault.com/a/253232/64874将日志更改为awk分隔,然后再

#

根据您的需要更改awk -l ./strptime.so -F'#' '{print strftime("%s", strptime($1, "%d/%b/%Y:%H:%M:%S %Z")) "#" $2 "#" $3}'