免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: emilylinux
打印 上一主题 下一主题

[日期时间] 求助: 格式化一个时间标记的字符串,然后计算时间差 [复制链接]

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
11 [报告]
发表于 2014-08-18 13:22 |只看该作者
回复 10# emilylinux
  1. date -d"`echo '15 Aug 2014 07:31:56'`"
复制代码

论坛徽章:
769
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
12 [报告]
发表于 2014-08-18 13:32 |只看该作者
回复 10# emilylinux
  1. date -d"`echo \"15 Aug 2014 07:31:56\"`"
复制代码

论坛徽章:
6
羊年新春福章
日期:2015-03-03 17:16:28双子座
日期:2015-03-03 17:16:56巳蛇
日期:2015-03-03 17:17:2415-16赛季CBA联赛之福建
日期:2016-03-11 09:05:00黑曼巴
日期:2016-07-07 16:58:1215-16赛季CBA联赛之吉林
日期:2016-11-14 09:23:07
13 [报告]
发表于 2014-08-18 14:22 |只看该作者
  1. [root@localhost ~]# cat test
  2. 15/Aug/2014:01:31:56
  3. [root@localhost ~]# time=`sed 's/:/ /;s/\//\-/g' test`
  4. [root@localhost ~]# date +%s -d"$time"
  5. 1408037516
复制代码

论坛徽章:
2
摩羯座
日期:2014-11-03 15:28:56卯兔
日期:2015-01-04 17:20:51
14 [报告]
发表于 2014-08-18 17:27 |只看该作者
nginx的日志么?
最近刚写过处理代码,只要看time那一段处理就行了

    cat ${tmpsrcfile}|awk -F'\\|\\|' '
        BEGIN{_time_="";_ip_="";_name_="";_byte_="";_rst_="";_lastLineTime_="";_lastLineCol1=""}
        {
         if($8~/\.apk /)
            {
             if(match($1,"time=")>0) _time_=substr($1,index($1,"time=")+5);
             if(match($2,"remote_addr=")>0) _ip_=substr($2,index($2,"remote_addr=")+12);
             if(match($8,"request=GET ")>0) _name_=substr($8,index($8,"request=GET ")+12);
             if(match($7,"body_bytes=")>0) _byte_=substr($7,index($7,"body_bytes=")+11);
             if(match($9,"status=")>0) _rst_=substr($9,index($9,"status=")+7);
             if($1!=_lastLineCol1)
                {
                 if(_time_&&_time_!=" ")
                    {
                     split(_time_,_arrTime_,"[/: ]");
                     _time_=_arrTime_[2]"  "_arrTime_[1]" "_arrTime_[4]":"_arrTime_[5]":"_arrTime_[6]" "_arrTime_[3];
                     "export Lang=utf-8;date -d \""_time_"\" +%Y%m%d%H%M%S"|getline _time_
                     _lastLineTime_=_time_
                     _lastLineCol1=$1
                    }
                }
             else
                {
                 _time_=_lastLineTime_
                };
             if(_ip_&&_ip_!=" ")
                {
                 gsub(/ /,"",_ip_)
                };
             if(_name_&&_name_!=" ")
                {
                 split(_name_,_arrName_," ");
                 split(_arrName_[1],_arrName2_,"/");
                 _name_=_arrName2_[length(_arrName2_)]
                };
             if(_byte_&&_byte_!=" ")
                {
                 gsub(/ /,"",_byte_)
                };
             if(_rst_&&_rst_!=" ")
                {
                 gsub(/ /,"",_rst_)
                };
             printf "%s|#%s|#%s|#%s|#%s\n",_time_,_ip_,_name_,_byte_,_rst_;
            }
        }'

论坛徽章:
2
摩羯座
日期:2014-11-03 15:28:56卯兔
日期:2015-01-04 17:20:51
15 [报告]
发表于 2014-08-18 17:31 |只看该作者
回复 14# bulletmarquis


    重点就是这句
               split(_time_,_arrTime_,"[/: ]");
                     _time_=_arrTime_[2]"  "_arrTime_[1]" "_arrTime_[4]":"_arrTime_[5]":"_arrTime_[6]" "_arrTime_[3];
                     "export Lang=utf-8;date -d \""_time_"\" +%Y%m%d%H%M%S"|getline _time_
                     _lastLineTime_=_time_
                     _lastLineCol1=$1


我是用getline来把字符串转成时间的
但是getline有一个问题,如果前面的命令执行结果与之前有重复,这一句getline就无法正常工作
所幸日志里面的时间一定是按时间排列好的,所以我加了一个判断,如果这一时间在之前行已经被处理过,这一次就直接用之前的值
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP