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.mzph.cn/news/26975.shtml

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

相关文章

Godot 4 源码分析 - 增加格式化字符串功能

Godot 4的主要字符串类型为String,已经设计得比较完善了,但有一个问题,格式化这块没怎么考虑。 String中有一个format函数,但这个函数只有两个参数,这咋用? String String::format(const Variant &va…

快速排序和qsort函数详解详解qsort函数

💕是非成败转头空,青山依旧在,几度夕阳红💕 作者:Mylvzi 文章主要内容:快速排序和qsort函数详解 前言: 我们之前学习过冒泡排序,冒泡排序尽管很方便,但也存在一些局限性…

Session与Cookie的区别(五)

储存状态的方式 小明的故事说完了,该来把上面这一段变成网络的实际案例了。其实在网络世界中问题也是一样的。 前面已经提到过我们会把状态存在 Cookie 里面,让 Request 之间能够变得有关联。 假设我们今天要来做一个会员系统,那我要怎么知道…

vue 列表|表格环境中的下拉菜单

elementui组件为vue提供了各式各样的ui组件,但均为各类最为基本的控件,没有提供业务级的使用案例,为此进行扩展补充。 vue-elementui 基本入门使用 一、下拉菜单 下拉菜单与html中的select控件有所差距,select为表单控件的一员页…

windows(iis)服务器部署安装wordpress(php)网站教程

该教程包含iis安装,php安装,mysql安装,php网站部署上线,windows服务部署php网站,只需要这一篇文章就够了。 该教程为iis服务器部署安装wordpress(php)网站教程,同样适用wordpress网站迁移。 配置要求 1、windows服务器安装iis windows服务器安装iis管理器 打开控制面…

项目中使用git vscode GitHubDesktopSetup-x64

一、使用git bash 1.使用git bash拉取gitee项目 1.在本地新建一个文件夹(这个文件夹是用来存放从gitee上拉下来的项目的) 2.在这个文件夹右键选择 git bash here 3.输入命令 git init (创建/初始化一个新的仓库) 4.输入命令 git remote add origin …

医学影像PACS临床信息系统源码

医学影像临床信息系统(Picture Archiving and Communication Systems)PACS是指从医疗影像设备中获得数字影像,利用高速网络进行存储、管理、传输的医疗影像信息管理系统。通过该系统,能实现影像数字化、无胶片化管理。 登记系统 …

配置Picgo图床之COS、OSS、Github图床

简介 PicGo是一款开源的图片上传和管理工具,它提供了简单易用的界面和丰富的功能,方便用户上传、管理和分享图片。 以下是PicGo的一些主要特点和功能: 图片上传:PicGo支持将本地图片快速上传到云存储服务,如七牛云、…

解决Vue+Element UI使用表单rules国际化时From表单验证信息不能实时更新

说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 博主在工作之余开始进行自动化测试平台的开发,虽然已经996一个月了但是还是在使劲挤时间做这件事情,目前平台使用前端框架vu…

LangChain手记 Overview

整理并翻译自DeepLearning.AILangChain的官方课程:Overview 综述(Overview) LangChain是为大模型应用开发设计的开源框架 LangChain目前提供Python和JavaScript(TypeScript)两种语言的包 LangChain的主攻方向是聚合和…

扩散模型实战(三):扩散模型的应用

推荐阅读列表: 扩散模型实战(一):基本原理介绍 扩散模型实战(二):扩散模型的发展 扩散只是一种思想,扩散模型也并非固定的深度网络结构。除此之外,如果将扩散的思想融入…

docker solr-8.11.2安装部署

历史背景 现在solr官网仅能够下载到最新版本的安装包。并且支持docker。现在就用docker来部署一下 1、准备工作 docker环境部署(这个自己百度一下哈,很简单两个命令就能解决) yum -y install yum-utils yum -y install docker-ce 安装命令…

第7集丨Vue 江湖 —— 条件渲染

目录 一、v-show二、v-if2.1 基本使用2.2 条件渲染分组2.3 与 v-else-if、v-else 结合使用 三、v-if vs v-show四、测试案例 本节条件渲染所涉及到的指令有: v-showv-ifv-else-ifv-else 一、v-show 1. 用法: 语法: v-show" 表达式"&#xff…

FFmpeg 使用总结

FFmpeg 简介 FFmpeg的名称来自MPEG视频编码标准,前面的“FF”代表“Fast Forward”,FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。可以轻易地实现多种视频格式之间的相互转换。包括如下几个部分&#xf…

webpack基础知识九:如何提高webpack的构建速度?

一、背景 随着我们的项目涉及到页面越来越多,功能和业务代码也会随着越多,相应的 webpack 的构建时间也会越来越久 构建时间与我们日常开发效率密切相关,当我们本地开发启动 devServer 或者 build 的时候,如果时间过长&#xff…

电源控制--品质因素Q值全解

什么是品质因素Q值? 在电源控制中,品质因素 Q 值通常用于描述电源滤波器的性能。电源滤波器用于减小电源中的噪声和干扰,以提供干净稳定的电源供应给电子设备。 品质因素 Q 值在电源滤波器中表示滤波器的带宽和中心频率之比,用于…

IP提取器对比器

需求: 一个html 页面 ,有两个输入框 第一个输入框输入文本中包含多个ip,输入的ip是不规则的,需要使用正则表达式提取出 输入文本的ip地址 , 然后在第二个输入框中输入内容,并提取出内容的ip ,如…

什么是OCR?OCR技术详解

光学字符识别(Optical Character Recognition)简称为“OCR”。ORC是指对包含文本资料的图像文件进行分析识别处理,获取文字及版面信息的技术。 一般包括以下几个过程: 1.图像输入 针对不同格式的图像,有着不同的存储格式和压缩方式。目前&…

Elastic:linux设置elasticsearch、kibana开机自启

0. 引言 每次启动服务器都要手动启动es服务,相当之不方便,为此,书写一个脚本,实现es、kibana的开机自启 1. 原理 首先任何服务要实现开机自启,都可分为如下三步: 1、在/etc/init.d目录下创建启动、关闭服…

海康威视摄像头配置RTSP协议访问、onvif协议接入、二次开发SDK接入

一、准备工作 (1)拿到摄像头之后,将摄像头电源线插好,再将网线插入到路由器上。 (2)将自己的笔记本电脑也连接到路由器网络,与摄像头出在同一个局域网。 二、配置摄像头 2.1 激活方式选择 第一次使用设备需要激活,在进行配置。 最简单,最方便的方式是选择浏览器激…