申请域网站,文山知名网站建设公司,旺道优化软件,wordpress谷歌字体优化文章目录 筛选给定时间范围内的日志时间时间戳什么是时间戳#xff1f; 系统时间 筛选日志时间示例简单示例mktime()函数是什么 进阶示例 筛选给定时间范围内的日志
时间
时间的表示方法#xff1a;
时间戳系统时间#xff08;年月日时间#xff09;
时间戳
什么是时间… 文章目录 筛选给定时间范围内的日志时间时间戳什么是时间戳 系统时间 筛选日志时间示例简单示例mktime()函数是什么 进阶示例 筛选给定时间范围内的日志
时间
时间的表示方法
时间戳系统时间年月日时间
时间戳
什么是时间戳
时间戳是指格林威治时间自1970年1月1日00:00:00 GMT至当前时间的总秒数。它也被称为Unix时间戳Unix Timestamp。通俗的讲时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。
查看当前的时间戳
date %s系统时间
一般说来就是我们执行 date命令看到的时间linux系统下所有的时间调用都是使用的这个时间。
组成部分主要由年月日时分秒以及时区组成
查看当前时间
date筛选日志时间示例
简单示例
grep/sed/awk用正则去筛选日志时如果要精确到小时、分钟、秒则非常难以实现。
但是awk提供了mktime()函数它可以将时间转换成epoch时间值。
mktime()函数是什么
mktime()函数返回自 1970 年 1 月 1 日以来持续时间的秒数(也就是可以返回到指定时间的时间戳)。如果发生错误则返回 -1 值。
使用格式
#将时间段以空格分隔
mktime(year month day hour minute second)示例
#2023-08-05 20:37:17转换成epoch为1970-01-01 00:00:00
[rootmaster /]# awk BEGIN{print mktime(2023 08 05 20 37 17)}
1691282237进阶示例
strptime2()实现的是将08/Nov/2023:03:42:4008:00格式的字符串转换成epoch值然后和which_time比较大小即可筛选出精确到秒的日志。
BEGIN{# 要筛选什么时间的日志将其时间构建成epoch值which_time mktime(2023 11 08 03 42 40)
}{# 取出日志中的日期时间字符串部分match($0,^.*\\[(.*)\\].*,arr)# 将日期时间字符串转换为epoch值tmp_time strptime2(arr[1])# 通过比较epoch值来比较时间大小if(tmp_time which_time){print }
}# 构建的时间字符串格式为08/Nov/2023:03:42:4008:00
function strptime2(str,dt_str,arr,Y,M,D,H,m,S) {dt_str gensub([/:], ,g,str)split(dt_str,arr, )Yarr[3]Mmon_map(arr[2])Darr[1]Harr[4]marr[5]Sarr[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]
}示例
1、准备一个需要筛选时间的日志
2、编写筛选时间的awk文件
3、执行awk命令
命令格式
awk -f 脚本文件 需要读取的文件 这样就筛选出来了11月8号前的日志了