更改日志文件中的时间格式

时间:2014-09-04 10:54:10

标签: shell sed

我有一个以下格式的squid日志文件:

31/Jul/2014:13:44:52 +0400.701 0 172.16.204.59 TCP_DENIED/407 5232 GET http://vec01.maps.yandex.net/tiles? - NONE/- text/html

但是日志分析器需要以unix格式的时间。

date命令可以转换为unix格式:

date -d "31 Jul 2014 12:51:57 +0400" '+%s'

1406796717

但是我无法编写用于更改格式的sed命令。请帮帮我。

2 个答案:

答案 0 :(得分:0)

比后处理更好的是,日志文件将配置squid config中日志中使用的时间格式,以便生成正确的日期/时间格式。

答案 1 :(得分:0)

例如,你可以使用它:

$ date -d"$(sed -r 's#^([0-9]{2})/(\w*)/([0-9]{4}):([0-9:]{8}).*#\1 \2 \3 \4#' file)"
Thu Jul 31 13:44:52 CEST 2014

利用这个sed:

$ sed -r 's#^([0-9]{2})/(\w*)/([0-9]{4}):([0-9:]{8}).*#\1 \2 \3 \4#' file
31 Jul 2014 13:44:52

它从包含此数据的行的开头捕获文本:XX/word/YYYY:ZZZ,是ZZZ 8位数字和半冒号的组合。

或更准确:

sed -r 's#^([0-9]{2})/(\w*)/([0-9]{4}):([0-9]{2}:[0-9]{2}:[0-9]{2}).*#\1 \2 \3 \4#' file