筛选给定时间范围的日志
一、时间戳以及当地时间的转换
1、概念
时间戳是指格林威治时间自1970年1月1日(00:00:00 GMT)至当前时间的总秒数。它也被称为Unix时间戳(Unix Timestamp)。通俗的讲,时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。查看当前时间戳:date +%s
系统时间,一般是执行data命令看到的时间 组成部分:主要由年月日时分秒,以及时区组成,查看当前时间:data
二、时间类内置函数:mktime
在AWK中,可以使用mktime函数将日期时间格式的时间转换为时间戳。
示例:将 "2019-11-10 03:42:40" 转换成 epoch 时间(即1970-01-01 00:00:00):
-
# 定义日期时间格式的时间
-
date_time_str = "2019-11-10 03:42:40",使用mktime函数将日期时间转换为时间戳
-
timestamp = mktime(date_time_str)
三、筛选给定时间范围内的日志
假设有以下日志实例:
实例1: 2023-08-05 12:30:15 实例2: 2023-08-06 09:15:20 实例3: 2023-08-06 09:15:25,现在我们要筛选出在 2023年8月6日 00:00:00 到 2023年8月6日 12:00:00 之间的日志。
start_time_str = "2023-08-06 00:00:00"
end_time_str = "2023-08-06 12:00:00"
start_timestamp = mktime(start_time_str)
end_timestamp = mktime(end_time_str)
awk -v start_ts=$start_timestamp -v end_ts=$end_timestamp '{
log_time_str = $1 " " $2
log_timestamp = mktime(log_time_str)
if (log_timestamp >= start_ts && log_timestamp <= end_ts) {
print $0
}
}' log.txt
以上AWK脚本会从日志文件log.txt中筛选出在给定时间范围内的日志实例,并输出符合条件的日志内容。
浙公网安备 33010602011771号