免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7999 | 回复: 8
打印 上一主题 下一主题

[文本处理] awk 中的mktime函数问题 [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-01-12 11:17 |只看该作者 |倒序浏览
本帖最后由 y331044508 于 2013-01-12 11:19 编辑

文件:

  1. starttime                                           stoptime
  2. 10:26:57.672 all - first_occurrence_time:Thu Jan 10 05:53:23 GMT+08:00
  3. 10:26:57.730 all - first_occurrence_time:Thu Jan 10 09:18:22 GMT+08:00
  4. 10:26:55.936 UnifiedPreprocessor - after standardize: com.zznode.tnms.fm.event.RawEventObje
  5. 10:26:57.760 all - first_occurrence_time:Thu Jan 10 09:34:59 GMT+08:00
  6. 10:26:57.774 all - first_occurrence_time:Thu Jan 10 09:53:11 GMT+08:00
  7. 10:26:55.936 UnifiedPreprocessor - after standardize: com.zznode.tnms.fm.event.RawEventObje
  8. 10:26:57.875 all - first_occurrence_time:Thu Jan 10 09:37:28 GMT+08:00
  9. 10:26:57.966 all - first_occurrence_time:Thu Jan 10 07:37:09 GMT+08:00
  10. 10:26:55.936 UnifiedPreprocessor - after standardize: com.zznode.tnms.fm.event.RawEventObje
  11. 10:26:58.054 all - first_occurrence_time:Thu Jan 10 09:53:12 GMT+08:00
  12. 10:26:58.074 all - first_occurrence_time:Thu Jan 10 09:37:06 GMT+08:00
  13. 10:26:55.936 UnifiedPreprocessor - after standardize: com.zznode.tnms.fm.event.RawEventObje
  14. 10:26:58.099 all - first_occurrence_time:Thu Jan 10 05:53:23 GMT+08:00
  15. 10:26:58.118 all - first_occurrence_time:Thu Jan 10 09:34:59 GMT+08:00
  16. 10:26:55.936 UnifiedPreprocessor - after standardize: com.zznode.tnms.fm.event.RawEventObje
复制代码
脚本:
  1. #!/bin/sh
  2. FM=/home/user/file

  3. tail -f $FM|awk -F'[. ]' '/all - first_occurrence_time/{
  4.        
  5.         start="2013:01:01 "$1
  6.         end="2013:01:01 "$11
  7.        
  8.         stm=mktime(gensub(/[:]/, " ", "g", start))
  9.         etm=mktime(gensub(/[:]/, " ", "g", end))  
  10.        
  11.         if(stm-etm > 1000)
  12.         print $0,"\n告警延迟时间:"stm-etm " s"
  13.        
  14. }'
复制代码
脚本作用:计算日志中starttime和stoptime两个时间差(时间使用了函数mktime转换为时间戳),如果时间差超过
预设的值,就会把结果打印出来。

问题是,mktime函数在liunx系统里面可以,但UNIX服务器中的awk不支持mktime函数,有没有其他办法替换
mktime函数。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2013-01-12 12:05 |只看该作者
难道大牛们今天都出去嗨皮了。。。咋没人呢

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
3 [报告]
发表于 2013-01-12 18:58 |只看该作者

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2013-01-12 21:52 |只看该作者
回复 3# waker
  1. #!/bin/sh
  2. FM=/home/user/FmServer.log

  3. function date2seconds(){
  4.     echo "$*" | awk '{
  5.         z=int((14-$2)/12); y=$1+4800-z; m=$2+12*z-3;
  6.         j=int((153*m+2)/5)+$3+y*365+int(y/4)-int(y/100)+int(y/400)-2472633;
  7.         j=j*86400+$4*3600+$5*60+$6
  8.                                 print j
  9.     }'
  10. }

  11. export -f date2seconds

  12. awk -F'[. ]' '/all - first_occurrence_time/{
  13.        
  14.         start="2013:01:01 "$1
  15.         end="2013:01:01 "$11
  16.        
  17.         stm=(gensub(/[:]/, " ", "g", start))
  18.         etm=(gensub(/[:]/, " ", "g", end))
  19.        
  20.         st=system("date2seconds "stm"")
  21.         et=system("date2seconds "etm"")
  22.        
  23. }' $FM
复制代码
采用了shell date2seconds函数,由于第一次用这个不怎么会,现在system("date2seconds "stm"")可以将时间
转换为时间戳了,但stm和etm两个值怎么相减啊,,,就上面的这个我执行的结果是stm和etm竖着输出了.
我定义了st=system("date2seconds "stm"") ,但结果st是0,,,不知道那里出了问题,还请不吝赐教。
这个脚本现在执行的结果是:
1357036019
1357019604
1357036019
1357033418
1357036019
1357026295
1357028995
1357036019

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
5 [报告]
发表于 2013-01-13 00:38 |只看该作者
回复 4# y331044508
  1.         st=system("date2seconds "stm"") -->("date2seconds " stm) |getline st
  2.         et=system("date2seconds "etm"") --> ("date2seconds " etm) |getline et
复制代码

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
6 [报告]
发表于 2013-01-13 00:39 |只看该作者
回复 4# y331044508


    或者把那个函数,写成awk的一个自定义函数,之后使用

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
7 [报告]
发表于 2013-01-13 22:48 |只看该作者
回复 5# yinyuemi


    太感谢yinyuemi ,运行非常完美,,,至于你说的把函数写到awk里面,我现在还在学怎么写,对于这块不是很熟悉,再次感谢yinyuemi 和waker 两位大牛的帮忙。

论坛徽章:
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
8 [报告]
发表于 2013-01-14 10:59 |只看该作者

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
9 [报告]
发表于 2013-01-14 18:03 |只看该作者
回复 8# Shell_HAT
  1. #!/usr/bin/sh
  2. FM=$TNMS_LOG_DIR/FmServer.log

  3. unix_check(){
  4. awk -F'[. ]' '/all - first_occurrence_time/{

  5.                 start="2013:01:01 "$1
  6.                 end="2013:01:01 "$11

  7.                 stm=(gsub(/[:]/, " ", start))
  8.                 etm=(gsub(/[:]/, " ", end))

  9.                 #("date2seconds " stm) |getline st
  10.                 #("date2seconds " etm) |getline et
  11.                 st=date2seconds(stm)
  12.                 et=date2seconds(etm)

  13.                 if(st-et>15000)
  14.                 print $0,"\n告警延迟时间:",st-et " s\n"

  15.         }' $FM

  16.         function date2seconds{
  17.         echo "$*" |awk '{
  18.             z=int((14-$2)/12); y=$1+4800-z; m=$2+12*z-3;
  19.             j=int((153*m+2)/5)+$3+y*365+int(y/4)-int(y/100)+int(y/400)-2472633;
  20.             J=j*86400+$4*3600+$5*60+$6
  21.             print J
  22.                 }'
  23.         }
  24. }
  25. unix_check
复制代码
系统:
tnmsapp2#[/opt/tnms2]uname -a
HP-UX tnmsapp2 B.11.23 U 9000/800 220527058 不限用户数的许可证

我使用了你写的日期转换函数,放到awk里面有报错,麻烦给分析下,不胜感激。

tnmsapp2#[/opt/tnms2]y.sh
./y.sh[4]: 语法错误在行 24 : `echo' 是不期望的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP