当前位置: 首页 > news >正文

AWK实战案例——筛选给定时间范围内的日志

时间戳与当地时间

        概念:

                1.时间戳:

时间戳是指格林威治时间自1970年1月1日(00:00:00 GMT)至当前时间的总秒数。它也被称为Unix时间戳(Unix Timestamp)。通俗的讲,时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。

                2.当地时间(即夏时制DST):

又称“日光节约时制”和“夏令时间”,是一种为节约能源而人为规定地方时间的制度,在这一制度实行期间所采用的统一时间称为“夏令时间”。一般在天亮早的夏季人为将时间提前一小时,可以使人早起早睡,减少照明量,以充分利用光照资源,从而节约照明用电。

以上俩个也是时间的表示方式

 AWK的内置时间函数

grep/sed/awk用正则去筛选日志时,如果要精确到小时、分钟、秒,则非常难以实现。

但是awk提供了mktime()函数,它可以将时间转换成epoch时间值。

# 2019-11-10 03:42:40转换成epoch为1970-01-01 00:00:00
$ awk 'BEGIN{print mktime("2019 11 10 03 42 40")}'
1573328560

借此,可以取得日志中的时间字符串部分,再将它们的年、月、日、时、分、秒都取出来,然后放入mktime()构建成对应的epoch值。因为epoch值是数值,所以可以比较大小,从而决定时间的大小。

 实战案例

        案例一:

strptime1()实现的是将2019-11-10T03:42:40+08:00格式的字符串转换成epoch值,然后which_time比较大小即可筛选出精确到秒的日志。可以利用patsplit来取时间中的数字

BEGIN{
which_time = mktime("2019 11 10 03 42 40")   #要筛选什么时间的日志,将其时间构建成epoch值
}
{
match($0,"^.*\\[(.*)|1].*",arr)       #取出日志中的日期时间字符串部分tmp_time = strptime1(arr[1])           # 将日期时间字符串转换为epoch值if(tmp_time >which_time){print}        #通过比较epoch值来比较时间大小
}# 构建的时间字符串格式为:"2019-11-10T03:42:40+08:00"
function strptime1(str,arr,Y,M,D,H,m,S){
patsplit(str,arr,"[0-9]{1,4}")
Y=arr[1]
M=arr[2]
D=arr[3]
H=arr[4]
m=arr[5]
S=arr[6]
return mktime(sprintf("%s %s %s %s %s %s", Y,M,D,H,m,S))
}# 可以使用match  gsub  gensub ,先将各个标点符号替换成空格,然后再用split进行字段划分#patsplit:使用正则表达式来匹配字符串,将匹配成功的部分显示出来,并保存到数组当中.需要指定:字符串,数组,正则表达式,由此已经取到了年月日时分秒

即可得到时间 

        案例二:

strptime2()实现的是将10/Nov/2019:23:53:44+08:00格式的字符串转换成epoch值,然后和which_time比较大小即可筛选出精确到秒的日志。

BEGIN{# 要筛选什么时间的日志,将其时间构建成epoch值which_time = mktime("2019 11 10 03 42 40")
}{# 取出日志中的日期时间字符串部分match($0,"^.*\\[(.*)\\].*",arr)# 将日期时间字符串转换为epoch值tmp_time = strptime2(arr[1])# 通过比较epoch值来比较时间大小if(tmp_time > which_time){print }
}# 构建的时间字符串格式为:"10/Nov/2019:23:53:44+08:00"
function strptime2(str,dt_str,arr,Y,M,D,H,m,S) {dt_str = gensub("[/:+]"," ","g",str)# dt_sr = "10 Nov 2019 23 53 44 08 00"split(dt_str,arr," ")Y=arr[3]M=mon_map(arr[2])D=arr[1]H=arr[4]m=arr[5]S=arr[6]return mktime(sprintf("%s %s %s %s %s %s",Y,M,D,H,m,S))
}function mon_map(str,mons){mons["Jan"]=1mons["Feb"]=2mons["Mar"]=3mons["Apr"]=4mons["May"]=5mons["Jun"]=6mons["Jul"]=7mons["Aug"]=8mons["Sep"]=9mons["Oct"]=10mons["Nov"]=11mons["Dec"]=12return mons[str]
}

http://www.lryc.cn/news/113894.html

相关文章:

  • 摄影入门基础笔记
  • 如何在业务中体现TCC事务模型?
  • TouchGFX字库外置的另一种处理方式
  • jvm的垃圾回收算法有哪些
  • untiy 连接两个UI或一段固定一段跟随鼠标移动的线段
  • 如何成为顶级开源项目的贡献者
  • Threads and QObjects
  • Tcp是怎样进行可靠准确的传输数据包的?
  • [SWPUCTF 2022 新生赛]numgame
  • java异常机制分析
  • 浅谈Python中的内存管理 程序的内存布局
  • (具体解决方案)训练GAN深度学习的时候出现生成器loss一直上升但判别器loss趋于0
  • Redis 安装以及配置隧道连接
  • FFmpeg 使用总结
  • 出现Error: Cannot find module ‘compression-webpack-plugin‘错误
  • Elasticsearch 摄取管道 — 检测到管道的死循环
  • C# ListBox自动滚动方法
  • 使用(Ajax原理)Promise + XHR实现请求数据
  • 【HTML】<input>
  • 数据结构中一些零碎且易忘的知识点
  • 2023上半年京东烘干机行业品牌销售排行榜(京东商品数据)
  • ADS版图画封装学习笔记
  • 空地协同智能消防系统——无人机、小车协同
  • 篇二十二:解释器模式:处理语言语法
  • 【LeetCode 75】第二十一题(1207)独一无二的出现次数
  • node中使用express+mongodb实现分页查询
  • 信创优选,国产开源。Solon v2.4.2 发布
  • Java HTTP client常见库
  • 【Java基础教程】(四十四)IO篇 · 上:File类、字节流与字符流,分析字节输出流、字节输入流、字符输出流和字符输入流的区别~
  • 电商数据获取:网络爬虫还是付费数据接口?