8.5---筛选给定时间范围内的日志

本文介绍了如何在Unix/Linux系统中使用awk的mktime和strptime函数进行时间戳和当地时间的转换,以及gensub函数的应用,以精确筛选日志中的时间。通过实例演示了如何筛选出特定时间范围的日志记录。
摘要由CSDN通过智能技术生成

时间戳及当地时间的转换:

1、概述:

新纪元(epoch):UNIX及Linux的时间系统是由「新纪元时间」Epoch开始计算起,单位为秒,Epoch则是指定为1970年一月一日凌晨零点零分零秒,格林威治时间。

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

时区:世界按照经度被划分为24个时区;

2、时间两种表示方法:

时间戳:从新纪元开始到当前时间的秒数。
当地年月日时间:组成部分为 年、月、日、时、分、秒、是否是夏时制、当地时区。

简单实例:

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

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

mktime函数创建指定时间,转化为时间戳
特别注意中间必须以空格分割!!!
mktime(“2018 09 09 12 12 20”)

#将 2019-11-10 03:42:40转换成epoch为1970-01-01 00:00:00

[root@localhost ~]# awk  'BEGIN{print mktime("2019 11 10 03 42 40")}'
1573375360

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

进阶实例:

下面将strptime2()实现的是将
27/Jul/2023:18:36:30+0800 格式的字符串转换成 epoch 值,然后和 which_time 比较大小,既可以筛选出精确到秒的日志。

BEGIN{
   
  # 要筛选什么时间的日志,将其时间构建成epoch值
  which_time = mktime("2023 07 27 18 36 30")
}

{
   
  # 取出日志中的日期时间字符串部分
  match($0,"^.*\\[(.*)\\].*",arr)

  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RongChuJie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值