我的目标是将日期从我的apache日志转换为“12 / Nov / 2015:23:28:22”格式的纪元格式。可以使用date命令完成,还是需要解析和提取信息?
答案 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/hhjQuu9gx3YJ向dateutils.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}'
。