利用awk筛选给定时间范围内的日志

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

查看当前的时间戳
date +%s

[root@yangxingquan httpd]# date +%s

1691465408

系统时间

​ 一般说来就是我们执行 date命令看到的时间,linux系统下所有的时间调用都是使用的这个

时间。

​ 组成部分:主要由年月日时分秒,以及时区组成

查看当前时间

[root@yangxingquan httpd]# date

2023年 08月 08日 星期二 11:28:57 CST

利用实例理解

例一

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

mktime()函数

但是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")}'

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

以比较大小,从而决定时间的大小。

下面strptime1()实现的是将2019-11-10T03:42:40+08:00格式的字符串转换成epoch值,

然后和which_time比较大小即可筛选出精确到秒的日志。

测试:

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

1573328560

可以利用patsplit来取时间中的数字

BEGIN{
 
    #要筛选什么时间的日志,将其时间构建成epoch值
 
    which_time = mktime("2023 8 7 11 05 54")
 
}
 
 
 
{
 
    #取出日志中的日期时间字符串部分
 
    match ($0, "^.*\\[(.*)\\].*" , arr)
 
 
 
    #将日期时间字符串转换为epoch值
 
    tmp_time = strptime1(arr[1])
 
 
 
    #通过比较epoch值来比较时间大小
 
    if(tmp_time > which_time){print}}
 
 
 
    #构建的时间字符串格式为:"2023-8-7T11:05:54+08:80"
 
    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]
 
 
 
    #通过mktime构建字符串
 
    return mktime(sprintf("%s %s %s %s %s %s",Y,M,D,H,m,S))
 
}

程序运行逻辑先定义一个筛选时间将其转化成epoch值,然后利用正则表达式取出日志中的时间字符串将其放入arr[]数组中,循环调用strptime1()函数循环判断

#patsplit:使用正则表达式来匹配字符串,将匹配成功的部分赋给对于变量,最后显示出来。

例二

BEGIN{
 
  # 要筛选什么时间的日志,将其时间构建成epoch值
 
  which_time = mktime("2023 8 7 11 05 54")
 
}
 
 
 
{
 
  # 取出日志中的日期时间字符串部分
 
  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 = "7 Aug 2023 11 05 54 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"]=1
 
  mons["Feb"]=2
 
  mons["Mar"]=3
 
  mons["Apr"]=4
 
  mons["May"]=5
 
  mons["Jun"]=6
 
  mons["Jul"]=7
 
  mons["Aug"]=8
 
  mons["Sep"]=9
 
  mons["Oct"]=10
 
  mons["Nov"]=11
 
  mons["Dec"]=12
 
  return mons[str]
 
}

程序运行逻辑与例1一样,只不过不同时间格式不一样需要利用gensub()函数将/:替换成空格,再用split()将函数利用空格分隔,将英文月份转换成数字即可。

 使用 awk 命令 -f 选项 从脚本文件中读取 access.log日志文件,从而进行筛选;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/81662.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据分析专栏之Python篇】五、pandas数据结构之Series

前言 大家好!本期跟大家分享的知识是 Pandas 数据结构—Series。 一、Series的创建 Series 是一种类似于一维数组的对象,由下面两部分组成: values:一组数据,ndarray 类型index:数据索引 顾名思义&…

STM32——STM32F401x系列标准库的下载+环境搭建+建工程步骤(更完整)

文章目录 标准库的下载环境搭建建工程最后的话 标准库的下载 1.STM32标准库的官网下载网站https://www.st.com/content/st_com/en.html 2. 3. 4. 5. 6. 7.点击之后下滑 8.选择自己需要的版本下载 环境搭建建工程 大致步骤同之前我写的一篇STM32——建工程差不多&#xff0…

Vue 本地应用 记事本 v-on v-model v-for使用

vue当中如何生成列表结构?使用的指令是v-for,同时要有一个可以生成列表的数据,常用的是数组。记事本里面的内容并不复杂,所以这里使用字符串数组就行了。 获取用户输入的内容使用绑定v-model,双向数据绑定&#xff08…

【IMX6ULL驱动开发学习】02.hello驱动程序之cdev注册字符设备驱动程序和设置次设备号

目录 ​编辑 一、register_chrdev 二、解决方法 2.1 alloc_chrdev_region函数:注册一系列字符设备编号 2.2 cdev_init函数:初始化cdev结构体 2.3 cdev_add函数:将字符设备添加到系统中 三、驱动程序 一、register_chrdev major reg…

NAND Flash 失效之 Data Rentention | 闪存数据保持力 | 数据放几年就坏掉了?

依公知及经验整理,原创保护,禁止转载。专栏 《深入理解Flash:闪存特性与实践》 图1: Data Retention 对 Vt 电压分布影响 图片来源: 知乎 [2] 全文 1900 字, 内容摘要 Data Retention 产生 Data Retention 的影响因素  如何规避 Data Rention 问题 发生Data Retent…

MyCat分片规则——应用指定分片规则、日期分片、固定分片hash算法

1.应用指定分片规则 2.固定分片hash算法 3.字符串hash解析 4.按天(日期)分片 5.按自然月进行分片

Django入门 - Http协议前后端交互

Http协议前后端交互 在前后端交互当中,前端后端用的协议是http协议 先请求后响应,响应完之后连接就会断开我们可以认为它其实是一个短连接 或者 无连接。在它内部其实是基于TCP协议的,它也会有三次握手,但是这是内部的&#xff…

[oeasy]python0081_[趣味拓展]ESC键进化历史_键盘演化过程_ANSI_控制序列_转义序列_CSI

光标位置 回忆上次内容 上次了解了 新的转义模式 \033 逃逸控制字符 escape 这个字符 让字符串 退出标准输出流进行控制信息的设置 可以设置 光标输出的位置 ASR33中的ALT MODE 是 今天的ESC键吗????🤔 查询文档…

开源语言模型的历史和重要性;Edge浏览器将推出Bing AI重写文本功能

🦉 AI新闻 🚀 微软即将推出桌面版Microsoft Edge浏览器的Bing AI重写文本功能 摘要:微软最近在桌面版Microsoft Edge浏览器中引入了一个新功能,允许用户使用Bing AI重写文本。用户可以选择不同的语气、格式和长度,然…

安全杂记 - Linux文本三剑客之awk

目录 1.什么是AWK2.正则表达式3.语法4.内置变量示例printf命令5.复现awk经典实例(1).插入几个新字段(2).格式化空白(3).筛选IPv4地址(4).筛选给定时间范围内的日志 1.什么是AWK awk、grep、sed是linux操作文本的三大利器,合称文本三剑客。三者的功能都是处理文本&a…

一百四十三、Linux——Linux的CentOS 7系统语言由中文改成英文

一、目的 之前安装CentOS 7系统的时候把语言设置成中文,结果Linux文件夹命名出现中文乱码的问题,于是决定把Linux系统语言由中文改成英文 二、实施步骤 (一)到etc目录下,找到配置文件locale.conf # cd /etc/ # ls…

Python自动化测试用例:如何优雅的完成Json格式数据断言

目录 前言 直接使用 优化 封装 小结 进阶 总结 资料获取方法 前言 记录Json断言在工作中的应用进阶。 直接使用 很早以前写过一篇博客,记录当时获取一个多级json中指定key的数据: #! /usr/bin/python # coding:utf-8 """ aut…

399. 除法求值

题目描述&#xff1a; 主要思路&#xff1a; 本题主要利用并查集的思想&#xff0c;重点是要弄明白分子和分母的指向关系以及一系列的值的变化规则。 查询时如果两个数字不在一个集合里那么结果就为-1. class Solution { public:unordered_map<string,string> f;unorde…

MongoDB创建用户 、数据库、索引等基础操作

MongoDB的权限认证是相对来说比较复杂的&#xff0c;不同的库创建后需要创建用户来管理。 本机中的MongoDB是docker 启动的&#xff0c;所以先进入docker的镜像中 docker exec -it mongodb bash 这样就进入到了镜像MongoDB中&#xff0c;然后输入命令连接MongoDB数据库 注…

【Spring】实现FactoryBean接口

FactoryBean FactoryBean是一个接口&#xff0c;需要创建一个类来实现该接口&#xff0c;该接口中有三个方法&#xff0c;通过重写其中的两个方法&#xff0c;获得一个对象&#xff0c;三个方法分别是&#xff1a; 1.getObject():通过一个对象交给IOC容器管理2.getObjectType(…

亿欧智库:2023中国宠物行业新趋势洞察报告(附下载)

关于报告的所有内容&#xff0c;公众【营销人星球】获取下载查看 核心观点 户外赛道本质上迎合了全球共性需求的增长&#xff0c;从养宠意愿的转化到养宠生活的需求&#xff0c;多层次的需求推动行业发展新趋势 从需求端进行分析&#xff0c;可以将养宠意愿的转化分为三个层…

解决:Springboot视频接口报大量的ClientAbortException找不到原因

浏览器有自己的缓冲策略&#xff0c;比如视频接口吐出了100MB的视频数据&#xff0c;浏览器可不会全部拿走&#xff0c;而是按需去拿&#xff0c; 举个例子&#xff0c;浏览器拿的视频数据够看半分钟的&#xff0c;就停止读取数据了&#xff0c;但是http连接并未断开&#xff…

安装ubuntu 18.04 系统(1)——制作系统安装U盘

https://rufus.ie/zh/ 下载该软件&#xff0c;准备制作启动盘下载自己想要的镜像&#xff0c;http://mirrors.163.com/ubuntu-releases/18.04/&#xff0c; 我选择的是ubuntu-18.04.6-live-server-amd64.iso 因为&#xff0c;科研写程序使用&#xff0c;不需要桌面版本。开始制…

pytorch Stream 多流处理

CUD Stream https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#c-language-extensions 中指出在kenel的调用函数中最后一个可选参数表示该核函数处在哪个流之中。 - 参数Dg用于定义整个grid的维度和尺寸&#xff0c;即一个grid有多少个block。为dim3类型。…

深入探索C++模板:从基础到高级应用

目录 一、 泛型编程 1.1 为什么需要泛型编程&#xff1f; 二、模板 2.1 概念 2.2 函数模板 2.2.1 概念 2.2.2 语法 2.2.3 示例 2.2.4 模板实例化 隐式实例化 显示实例化 2.2.5 模板参数的匹配原则 2.3 类模板 2.3.1 概念 2.3.2 语法 2.3.3 示例 2.3.4 注意事项…