Linux grep技巧 结合awk查询
目录
- 一. 前提
- 1.1 数据准备
- 1.2 数据说明
- 二. 查询
- 2.1 统计每个加盟店搜索的次数
一. 前提
1.1 数据准备
⏹file1.log
140 2024/07/08 12:35:01.547 c1server2 5485 [ERROR] SPLREQUEST seqNo=11459,eventController=PMT.payinfoforprc.test.search,oldest_data_search=2
110 2024/07/08 12:34:56.457 c1server1 5892 [INFO] MYCODE2005 测试方法被调用。(method=selectSvc_Test_Id param cpId=16xx2 status=OK) userid=adminUser
150 2024/07/08 12:35:02.231 c1server3 5634 [INFO] SPLREQUEST seqNo=11460,eventController=PMT.payinfoforprc.test.search,oldest_data_search=1
120 2024/07/08 12:34:57.235 c1server1 5675 [INFO] MYCODE2005 测试方法被调用。(method=selectSvc_Test_Id param cpId=16xx2 status=OK) userid=adminUser
160 2024/07/08 12:36:22.534 c1server3 2564 [WARN] SPLREQUEST seqNo=11461,eventController=PMT.payinfoforprc.test.search,oldest_data_search=1
130 2024/07/08 12:34:58.546 c1server2 6354 [INFO] MYCODE2005 测试方法被调用。(method=selectSvc_Test_Id param cpId=16xx2 status=OK) userid=adminUser
110 2024/07/08 12:34:56.456 c1server1 5892 [INFO] SPLREQUEST seqNo=11456,eventController=PMT.payinfoforprc.test.search,oldest_data_search=1
140 2024/07/08 12:35:01.548 c1server2 5485 [ERROR] MYCODE2005 测试方法被调用。(method=selectSvc_Test_Id param cpId=45xx2 status=OK) userid=adminUser
120 2024/07/08 12:34:57.234 c1server1 5675 [INFO] SPLREQUEST seqNo=11457,eventController=PMT.payinfoforprc.test.search,oldest_data_search=2
150 2024/07/08 12:35:02.232 c1server3 5634 [INFO] MYCODE2005 测试方法被调用。(method=selectSvc_Test_Id param cpId=45xx2 status=OK) userid=adminUser
130 2024/07/08 12:34:58.545 c1server2 6354 [INFO] SPLREQUEST seqNo=11458,eventController=PMT.payinfoforprc.test.search,oldest_data_search=1
160 2024/07/08 12:36:22.535 c1server3 2564 [WARN] MYCODE2005 测试方法被调用。(method=selectSvc_Test_Id param cpId=45xx2 status=OK) userid=adminUser
⏹file2.log
210 2024/07/08 12:34:56.456 c1server1 5892 [INFO] SPLREQUEST seqNo=21456,eventController=PMT.payinfoforprc.test.search,oldest_data_search=1
240 2024/07/08 12:35:01.548 c1server2 5485 [ERROR] MYCODE2005 测试方法被调用。(method=selectSvc_Test_Id param cpId=89xx2 status=OK) userid=adminUser
260 2024/07/08 12:34:57.234 c1server1 5675 [INFO] SPLREQUEST seqNo=21457,eventController=PMT.payinfoforprc.test.search,oldest_data_search=2
210 2024/07/08 12:35:02.232 c1server3 5634 [INFO] MYCODE2005 测试方法被调用。(method=selectSvc_Test_Id param cpId=16xx2 status=OK) userid=adminUser
240 2024/07/08 12:34:58.545 c1server2 6354 [INFO] SPLREQUEST seqNo=21458,eventController=PMT.payinfoforprc.test.search,oldest_data_search=1
260 2024/07/08 12:36:22.535 c1server3 2564 [WARN] MYCODE2005 测试方法被调用。(method=selectSvc_Test_Id param cpId=89xx2 status=OK) userid=adminUser
1.2 数据说明
- 第一列用户存储线程号,一个完整的用户请求要分为很多步骤,每一个步骤的线程号都是相同的
但是由于多个用户同时访问服务器,因此一个请求所产生的各个步骤的日志并不是连续打印,而是错落间隔在日志的各部分中
我们可以通过线程号,来将一个请求的完整内容抽取出来 - 第二列存储时间
- 第三列存储服务器名称,一个系统可能有多个服务器
- eventController:功能的名称
- cpId:加盟店ID
二. 查询
- 查询
PMT.payinfoforprc.test.search功能 - 然后通过
oldest_data_search=1进一步过滤 - 然后通过
awk '{print $1}'获取出第一列(awk默认通过空格分列)./file1.log:150./file1.log:160
- 再通过
awk -F ":" '{print "^"$2 " " $1}'构造查询key^150 ./file1.log^160 ./file1.log
- 再通过
xargs -L 1 grep -a命令,从前面的命令中读取一行输入,并将其作为参数传递给下一个命令grep -a构造查询命令grep -a ^150 ./file1.loggrep -a ^160 ./file1.log
- 最后再从查询的结果中,通过
grep -E "SPLREQUEST|MYCODE2005"进一步筛选
grep -a "PMT.payinfoforprc.test.search" ./file*.log | \
grep -a "oldest_data_search=1" | \
awk '{print $1}' | \
awk -F ":" '{print "^"$2 " " $1}' | \
xargs -L 1 grep -a | \
grep -E "SPLREQUEST|MYCODE2005"
2.1 统计每个加盟店搜索的次数
⏹完整命令
cpId=[^ ]*- 查询不为空的cpId
awk '{$1=$1; print $0}'- 清除行中的多余空格。通过重新格式化行
- awk 会用单个空格替换多个连续的空格
grep -a "PMT.payinfoforprc.test.search" ./file*.log | \
grep -a "oldest_data_search=1" | \
awk '{print $1}' | \
awk -F ":" '{print "^"$2 " " $1}' | \
xargs -L 1 grep -a | \
grep -E "MYCODE2005" | \
grep -o -e "param cpId=[^ ]*" | \
uniq -c | \
awk '{$1=$1; print $0}' | \
sort
- 查询拆解1
$ grep -a "PMT.payinfoforprc.test.search" ./file*.log | \
> grep -a "oldest_data_search=1" | \
> awk '{print $1}'./file1.log:150
./file1.log:160
./file1.log:110
./file1.log:130
./file2.log:210
./file2.log:240
- 查询拆解2
$ grep -a "PMT.payinfoforprc.test.search" ./file*.log | \
> grep -a "oldest_data_search=1" | \
> awk '{print $1}' | \
> awk -F ":" '{print "^"$2 " " $1}'^150 ./file1.log
^160 ./file1.log
^110 ./file1.log
^130 ./file1.log
^210 ./file2.log
^240 ./file2.log
- 查询拆解3
※为方便打印展示效果,将grep -a替换为echo 'grep -a'
$ grep -a "PMT.payinfoforprc.test.search" ./file*.log | \
> grep -a "oldest_data_search=1" | \
> awk '{print $1}' | \
> awk -F ":" '{print "^"$2 " " $1}' | \
> xargs -L 1 echo 'grep -a'grep -a ^150 ./file1.log
grep -a ^160 ./file1.log
grep -a ^110 ./file1.log
grep -a ^130 ./file1.log
grep -a ^210 ./file2.log
grep -a ^240 ./file2.log
- 查询拆解4
$ grep -a "PMT.payinfoforprc.test.search" ./file*.log | \
> grep -a "oldest_data_search=1" | \
> awk '{print $1}' | \
> awk -F ":" '{print "^"$2 " " $1}' | \
> xargs -L 1 grep -a | \
> grep -E "MYCODE2005"150 2024/07/08 12:35:02.232 c1server3 5634 [INFO] MYCODE2005 测试方法被调用。(method=selectSvc_Test_Id param cpId=45xx2 status=OK) userid=adminUser
160 2024/07/08 12:36:22.535 c1server3 2564 [WARN] MYCODE2005 测试方法被调用。(method=selectSvc_Test_Id param cpId=45xx2 status=OK) userid=adminUser
110 2024/07/08 12:34:56.457 c1server1 5892 [INFO] MYCODE2005 测试方法被调用。(method=selectSvc_Test_Id param cpId=16xx2 status=OK) userid=adminUser
130 2024/07/08 12:34:58.546 c1server2 6354 [INFO] MYCODE2005 测试方法被调用。(method=selectSvc_Test_Id param cpId=16xx2 status=OK) userid=adminUser
210 2024/07/08 12:35:02.232 c1server3 5634 [INFO] MYCODE2005 测试方法被调用。(method=selectSvc_Test_Id param cpId=16xx2 status=OK) userid=adminUser
240 2024/07/08 12:35:01.548 c1server2 5485 [ERROR] MYCODE2005 测试方法被调用。(method=selectSvc_Test_Id param cpId=89xx2 status=OK) userid=adminUser
- 查询拆解5
$ grep -a "PMT.payinfoforprc.test.search" ./file*.log | \
> grep -a "oldest_data_search=1" | \
> awk '{print $1}' | \
> awk -F ":" '{print "^"$2 " " $1}' | \
> xargs -L 1 grep -a | \
> grep -E "MYCODE2005" | \
> grep -o -e "param cpId=[^ ]*"param cpId=45xx2
param cpId=45xx2
param cpId=16xx2
param cpId=16xx2
param cpId=16xx2
param cpId=89xx2
- 查询拆解6
$ grep -a "PMT.payinfoforprc.test.search" ./file*.log | \
> grep -a "oldest_data_search=1" | \
> awk '{print $1}' | \
> awk -F ":" '{print "^"$2 " " $1}' | \
> xargs -L 1 grep -a | \
> grep -E "MYCODE2005" | \
> grep -o -e "param cpId=[^ ]*" | \
> uniq -c2 param cpId=45xx23 param cpId=16xx21 param cpId=89xx2
- 查询拆解7
$ grep -a "PMT.payinfoforprc.test.search" ./file*.log | \
> grep -a "oldest_data_search=1" | \
> awk '{print $1}' | \
> awk -F ":" '{print "^"$2 " " $1}' | \
> xargs -L 1 grep -a | \
> grep -E "MYCODE2005" | \
> grep -o -e "param cpId=[^ ]*" | \
> uniq -c | \
> awk '{$1=$1; print $0}'2 param cpId=45xx2
3 param cpId=16xx2
1 param cpId=89xx2
相关文章:
Linux grep技巧 结合awk查询
目录 一. 前提1.1 数据准备1.2 数据说明 二. 查询2.1 统计每个加盟店搜索的次数 一. 前提 1.1 数据准备 ⏹file1.log 140 2024/07/08 12:35:01.547 c1server2 5485 [ERROR] SPLREQUEST seqNo11459,eventControllerPMT.payinfoforprc.test.search,oldest_data_search2 110 20…...
关于Qt模型插入最后一行数据中存在未填满的项,点击导致崩溃的解决办法
在使用Qt模型视图框架的时候,你可能会遇见这种情况:给QTableView设置设置模型的时候,网模型里面插入数据,因为数据是一行一行插入的,即要使用model的appandRow函数,但有时候最后一行数据没有填满一行&#…...
Interpretability 与 Explainability 机器学习
「AI秘籍」系列课程: 人工智能应用数学基础人工智能Python基础人工智能基础核心知识人工智能BI核心知识人工智能CV核心知识 Interpretability 模型和 Explainability 模型之间的区别以及为什么它可能不那么重要 当你第一次深入可解释机器学习领域时,你会…...
Vue3项目如何使用npm link本地测试组件库
一、组件库操作 1、在组件库项目中先运行npm run lib,其效果如下 2、在组件库项目中在运行npm link,其效果如下 会创建一个全局的软连接指向本地的组件库 二、Vue3项目使用 1、在项目中运行 npm link 组件名称(即:组件库packag…...
后端之路——阿里云OSS云存储
一、何为阿里云OSS 全名叫“阿里云对象存储OSS”,就是云存储,前端发文件到服务器,服务器不用再存到本地磁盘,可以直接传给“阿里云OSS”,存在网上。 二、怎么用 大体逻辑: 细分的话就是: 1、准…...
大模型/NLP/算法面试题总结2——transformer流程//多头//clip//对比学习//对比学习损失函数
用语言介绍一下Transformer的整体流程 1. 输入嵌入(Input Embedding) 输入序列(如句子中的单词)首先通过嵌入层转化为高维度的向量表示。嵌入层的输出是一个矩阵,每一行对应一个输入单词的嵌入向量。 2. 位置编码&…...
【atcoder】习题——位元枚举
题意:求i&M的popcount的和,i属于0……N 主要思路还是变加为乘。 举个例子N22,即10110 假设M的第3位是1,分析N中: 00110 00111 00100 00101 发现其实等价于 0010 0011 0000 0001 也就是左边第4位和第5…...
世界人工智能大会 | 江行智能大模型解决方案入选“AI赋能新型工业化创新应用优秀案例”
日前,2024世界人工智能大会暨人工智能全球治理高级别会议在上海启幕。本次大会主题为“以共商促共享,以善治促善智”,汇聚了上千位全球科技、产业界领军人物,共同探讨大模型、数据、新型工业化等人工智能深度发展时代下的热点话题…...
css浮动及清除浮动副作用的三种解决方法
css浮动及清除浮动副作用的三种解决方法 文章目录 css浮动及清除浮动副作用的三种解决方法一、浮动定义二、浮动元素设置三、清除浮动副作用方法一四、清除浮动副作用方法二五、清除浮动副作用方法三 一、浮动定义 浮动(Float)是CSS中一种布局技术&…...
图像类别生成数字标签
类别 COCO 2017数据集分类标签。coco2017数据集下载。 cls [background, person, bicycle, car, motorcycle, airplane, bus,train, truck, boat, traffic light, fire hydrant,stop sign, parking meter, bench, bird, cat, dog,horse, sheep, cow, elephant, bear, zebra,…...
【Python】已解决:SyntaxError: invalid character in identifier
文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决:SyntaxError: invalid character in identifier 一、分析问题背景 在Python编程中,SyntaxError: invalid character in identifier是一个常见的编译…...
RDNet实战:使用RDNet实现图像分类任务(一)
论文提出的模型主要基于对传统DenseNet架构的改进和复兴,通过一系列创新设计,旨在提升模型性能并优化其计算效率,提出了RDNet模型。该模型的主要特点和改进点: 1. 强调并优化连接操作(Concatenation) 论文…...
Java小白入门到实战应用教程-介绍篇
writer:eleven 介绍 编程语言介绍 编程语言按照抽象层次和硬件交互的方式划分为低级编程语言和高级编程语言。 低级编程语言更接近计算机硬件层面,通常具有执行效率高的特点,但是由于注重计算机底层交互,所以编程难度相对较大。 高级编程…...
python脚本“文档”撰写——“诱骗”ai撰写“火火的动态”python“自动”脚本文档
“火火的动态”python“自动”脚本文档,又从ai学习搭子那儿“套”来,可谓良心质量👍👍。 (笔记模板由python脚本于2024年07月07日 15:15:33创建,本篇笔记适合喜欢钻研python和页面源码的coder翻阅) 【学习的细节是欢悦…...
若依 / ruoyi-ui:执行yarn dev 报错 esnext.set.difference.v2.js in ./src/utils/index.js
一、报错信息 These dependencies were not found: * core-js/modules/esnext.set.difference.v2.js in ./src/utils/index.js * core-js/modules/esnext.set.intersection.v2.js in ./src/utils/index.js * core-js/modules/esnext.set.is-disjoint-from.v2.js in ./src/utils…...
移动端Vant-list的二次封装,查询参数重置
Vant-list的二次封装 场景:在写项目需求的时候,移动端有用到vant-list组件。后续需求更新说要对列表数据页加搜索和筛选的功能。发现每次筛选完得在页面内手动重置一次查询参数。不方便,所以封了一层。 二次封装代码 <template><…...
SMU Summer 2024 Contest Round 2
[ABC357C] Sierpinski carpet - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路:通过因为图形的生成过程是完全一样的。可以通过递归,不断分形。函数process(x,y,k)定义为以坐标(x,y)为左上角,填充sqrt3(k)级的地毯。 int n; int c[800][800]; 默认全为…...
Qt:11.输入类控件(QLineEdit-单行文本输入控件、QTextEdit-多行文本输入控件、QComboBox-下拉列表的控件)
一、QLineEdit-单行文本输入控件: 1.1QLineEdit介绍: QLineEdit 是 Qt 库中的一个单行文本输入控件,不能换行。允许用户输入和编辑单行文本。 1.2属性介绍: inputMask 设置输入掩码,以限定输入格式。setInputMask(con…...
Qt 音频编程实战项目
一Qt 音频基础知识 QT multimediaQMediaPlayer 类:媒体播放器,主要用于播放歌曲、网络收音 机等功能。QMediaPlaylist 类:专用于播放媒体内容的列表。 二 音频项目实战程序 //版本5.12.8 .proQT core gui QT multimedia greate…...
C#委托事件的实现
1、事件 在C#中事件是一种特殊的委托类型,用于在对象之间提供一种基于观察者模式的通知机制。 1.1、事件的发送方定义了一个委托,委托类型的声明包含了事件的签名,即事件处理器方法的签名。 1.2、事件的订阅者可以通过运算符来注册事件处理器…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...
