欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

SHELL实例之日志时间转换

程序员文章站 2022-06-17 18:09:08
...

想把Apache已经生成的access.log文件中的[01/Aug/2008:14:06:30 +0800] 部分, 转换 成UTC 时间 的形式,然后输出为一个新的 日志 文件,如何用Shell实现 一下是access.log中记录的一个例子: 192.168.10.174 - - [01/Aug/2008:14:06:30 +0800] GET / HTTP/1.

想把Apache已经生成的access.log文件中的[01/Aug/2008:14:06:30 +0800] 部分,转换成UTC时间的形式,然后输出为一个新的日志文件,如何用Shell实现

一下是access.log中记录的一个例子:
192.168.10.174 - - [01/Aug/2008:14:06:30 +0800] "GET / HTTP/1.1" 302 659 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; GoogleT5; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)"
192.168.10.174 - - [01/Aug/2008:14:06:31 +0800] "GET /index.jsp HTTP/1.1" 200 16533 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; GoogleT5; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)"
192.168.10.174 - - [01/Aug/2008:14:06:32 +0800] "GET /ShowImageServlet?id=1&lang=ja&bean=SolutionBean HTTP/1.1" 200 5083 "http://192.168.10.253/index.jsp" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; GoogleT5; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)"
192.168.10.174 - - [01/Aug/2008:14:06:32 +0800] "GET /ShowImageServlet?id=2&lang=ja&bean=SolutionBean HTTP/1.1" 200 5148 "http://192.168.10.253/index.jsp" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; GoogleT5; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)"
192.168.10.174 - - [01/Aug/2008:14:06:32 +0800] "GET /images/favicon.ico HTTP/1.1" 200 5 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; GoogleT5; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)"
192.168.10.174 - - [01/Aug/2008:14:06:32 +0800] "GET /images/w3c_xhtml1.0.gif HTTP/1.1" 200 2333 "http://192.168.10.253/index.jsp" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; GoogleT5; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)"
192.168.10.174 - - [01/Aug/2008:14:06:32 +0800] "GET /images/zh/title.gif HTTP/1.1" 200 6606 "http://192.168.10.253/index.jsp" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; GoogleT5; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)"
192.168.10.174 - - [01/Aug/2008:14:06:32 +0800] "GET /include/MatrixOne.swf HTTP/1.1" 200 4073 "http://192.168.10.253/index.jsp" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; GoogleT5; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)"
192.168.10.174 - - [01/Aug/2008:14:06:32 +0800] "GET /script/Select.htc HTTP/1.1" 200 13800 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; GoogleT5; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)"
192.168.10.174 - - [01/Aug/2008:14:06:32 +0800] "GET /script/Select.htc HTTP/1.1" 200 13800 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; GoogleT5; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)"
192.168.10.174 - - [01/Aug/2008:14:06:32 +0800] "GET /script/check.js HTTP/1.1" 200 3619 "http://192.168.10.253/index.jsp" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; GoogleT5; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)"
192.168.10.174 - - [01/Aug/2008:14:06:32 +0800] "GET /script/initMenu.js HTTP/1.1" 200 17565 "http://192.168.10.253/index.jsp" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; GoogleT5; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)"
192.168.10.174 - - [01/Aug/2008:14:06:32 +0800] "GET /script/ja/souceXML.xml HTTP/1.1" 200 2604 "http://192.168.10.253/index.jsp" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; GoogleT5; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)"
192.168.10.174 - - [01/Aug/2008:14:06:32 +0800] "GET /script/styleSwitch.js HTTP/1.1" 200 1660 "http://192.168.10.253/index.jsp" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; GoogleT5; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)"
192.168.10.174 - - [01/Aug/2008:14:06:32 +0800] "GET /style/gray%20window/bgImg.gif HTTP/1.1" 200 97 "http://192.168.10.253/index.jsp" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; GoogleT5; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)"
192.168.10.174 - - [01/Aug/2008:14:06:32 +0800] "GET /style/gray%20window/bottom_bg.jpg HTTP/1.1" 200 4657 "http://192.168.10.253/index.jsp" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; GoogleT5; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)"


try:
$ awk 'BEGIN { FS="[][]"; OFS="" } {gsub(/\//,"-",$2);sub(/:/," ",$2); "date -ud \""$2"\""|getline a;$2="["a"]";print }' access.log

或者用gsed s/...//e

整个地球分为二十四时区,每个时区都有自己的本地时间。在国际无线电通信场合,为了统一起见,使用一个统一的时间,称为通用协调时(UTC, Universal Time Coordinated)。

例如我的例子中的[01/Aug/2008:14:06:30 +0800]是本地时间(即北京时间
UTC + 时区差 = 本地时间

时区差东为正,西为负。在此,把东八区时区差记为 +0800,

UTC + (+0800) = 本地(北京)时间 (1)

那么,UTC = 本地时间(北京时间))- 0800 (2)

14:06:30 - 08:00:00 = 06:06:30 这个就是UTC时间,不过有的时候会得到前一天的时间
这个也是个问题。。。