想把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时间,不过有的时候会得到前一天的时间
这个也是个问题。。。