Linux Grep案例

目录

  • 一. 查询两个文件第一列的数据并去重
  • 二. 抽取日志中指定的字段
  • 三. 服务器指定时间点异常查询
  • 四. 从csv文件中抽取指定的数据
  • 五. 获取除了空白行和注释之外的部分


一. 查询两个文件第一列的数据并去重

📚file1.log

123 aaa 你好
345 bbb 我好
345 ccc 大家好
124 ddd 世界好
111 rrr 哈哈哈

📚file2.log

123 mmm 你好mmm
366 nnn 我好nnn
377 fff 大家好fff
124 uuu 世界好uuu
111 iii 哈哈哈iii

🤔分析
两个文本文件格式相同,都是3列,第一例都是数字编号。可以通过打开这两个文件然后获取出开头列,然后排序之后再去重。

🧐转换为linux命令之后就是

  • 通过cat命令同时打开两个文本文件
  • -o 配置项只输出匹配到的内容
  • ^\S*匹配开头不为空的内容
  • sort 用来排序
  • uniq用来去重
cat file1.log file2.log | egrep -o -a "^\S*" | sort | uniq
111
123
124
345
366
377

👉如果我们想查看每个数字编码出现的次数的话,给uniq命令加上-c配置项即可。
其中第一列是数字编码出现的次数。

cat file1.log file2.log | egrep -o -a "^\S*" | sort | uniq -c
2 111
1 123
2 124
2 345
1 366
1 377

二. 抽取日志中指定的字段

📚有如下日志file4.log

  • 日志分内容分为2类,SEQIN 和 SEQOUT
  • SEQIN 类中存在若干字段内容,isuuePayId,uuid,jmw_state,method等等
2323 SEQIN mmm isuuePayId=5768awe uuid=woenoo; jmw_state=success method=paypay info=ppp
2323 SEQOUT COST=45726
2345 SEQIN mmm isuuePayId=34895ry uuid=;ljkler jmw_state=faile method=alipay info=ddd
2345 SEQOUT COST=34855

🤪需求,抽取出SEQIN类日志中的第一个字段,isuuePayId 和 jmw_state 字段,让其在一行显示

⏹第一步,抽取SEQIN类日志,去除掉 SEQOUT 日志

grep -a "SEQIN" file4.log
2323 SEQIN mmm isuuePayId=5768awe uuid=woenoo; jmw_state=success method=paypay info=ppp
2345 SEQIN mmm isuuePayId=34895ry uuid=;ljkler jmw_state=faile method=alipay info=ddd

⏹第二步,获取出SEQIN类日志中的第一个字段,isuuePayId 和 jmw_state 字段

grep -a "SEQIN" file4.log | egrep -o -a -e "^\S*" -e "isuuePayId=\S*" -e "jmw_state=\S*" 
2323
isuuePayId=5768awe
jmw_state=success
2345
isuuePayId=34895ry
jmw_state=faile

⏹第三步,让isuuePayId和jmw_state到一行上显示

grep -a "SEQIN" file4.log 
# 进一步过滤
| egrep -o -a -e "^\S*" -e "isuuePayId=\S*" -e "jmw_state=\S*" 
# 替换指定字段的换行符
| sed ':loop; N; $!b loop; ;s/\n\([ij]\)/ \1/g'
2323 isuuePayId=5768awe jmw_state=success
2345 isuuePayId=34895ry jmw_state=faile

三. 服务器指定时间点异常查询

  • 需求:由于上午发生网络波动,导致部分业务发生了异常
    • 现在需要查询出网络波动时间点和异常的件数
    • 哪个服务器发生的异常
    • 具体发生了什么的异常

⏹查询发生的件数版本1

  • 以ERROR 或 Exception 为关键词进行检索
  • c1A03a,c1Ae*a,c1Be*a都是服务器的名称
  • 同一个请求可能会发生多个异常,因此这种查询方式得到的件数可能会存在重复
grep -ae "\[ERROR\]" -ae "Exception" /logback/{c1A03a,c1Ae*a,c1Be*a}/tomcat/current/logs/
spl/.20240331*mpl*app.log | wc -l

⏹查询发生的件数版本2

grep -ae "\[ERROR\]" -ae "Exception" /logback/{c1A03a,c1Ae*a,c1Be*a}/tomcat/current/logs/
spl/.20240331*mpl*app.log | grep -a 09:0[5-9]:[0-5][0-9] | egrep -o "^\S*" | sort 
| uniq -c | wc -l

⏹查询发生异常的服务器名称

  • 根据时间点缩小范围
  • 查询开头不为空的部分(含有日志路径和线程号部分)
  • 排序之后去重
  • 之所以会用awk '{print $1}'是因为排序之后去重之后,获取到的内容之前会加上一个数字,用来表示当前行的重复数量
  • 若仅排序去重,不使用awk '{print $1}'处理,数据的大致样式如下
       1 /logback/c1Ae01a/tomcat/current/logs/spl/.2024033109mpl_test1_app.log:03210429-477895 /logback/c1Ae12a/tomcat/current/logs/spl/.2024033109mpl_test2_app.log:03210154-243893 /logback/c1Be07a/tomcat/current/logs/spl/.2024033109mpl_bis01_app.log:06334561-95267
    
  • 将查询结果放入result.log文件中
grep -ae "\[ERROR\]" -ae "Exception" /logback/{c1A03a,c1Ae*a,c1Be*a}/tomcat/current/logs/
spl/.20240331*mpl*app.log | grep -a 09:0[5-9]:[0-5][0-9] | egrep -o "^\S*" | sort 
| uniq -c | awk '{print $1}' > result.log

⏹result.log的内容如下

  • :的部分是日志所在的路径,从路径中可以找出服务器的名称
  • :的部分是请求的线程号,通过该线程号可以详细的抽出日志
/logback/c1Ae01a/tomcat/current/logs/spl/.2024033109mpl_test1_app.log:03210429-47789
/logback/c1Ae12a/tomcat/current/logs/spl/.2024033109mpl_test2_app.log:03210154-24389
/logback/c1Be07a/tomcat/current/logs/spl/.2024033109mpl_bis01_app.log:06334561-95267

四. 从csv文件中抽取指定的数据

sftp_data.csv

AAA,222,333,20240604,20
AAA,222,333,20240604,10
BBB,444PPP,555SS,20240605,20
BBB,444,555SS,20240610,20
CCC,555,666SS,20240605,10
CCC,666,666SS,20240603,20

🤔需要从上面的csv文件中抽取

  • 第四列的从20240601~20240605的数据
  • 第五列为20的数据

grep "^.*,.*,.*,2024060[1-5],20" sftp_data.csv

  • 前3列为任意值
  • 后两列指定正则表达式和具体的值
fengyehong@ubuntu:~/jmw_work_space/20270720$ grep "^.*,.*,.*,2024060[1-5],20" sftp_data.csv
AAA,222,333,20240604,20
BBB,444PPP,555SS,20240605,20
CCC,666,666SS,20240603,20

五. 获取除了空白行和注释之外的部分

  • cat file3.txt | grep -v ^# | grep -v ^$

在这里插入图片描述

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

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

相关文章

神经网络搭建实战与Sequential的使用

一、需要处理的图像 二、对上述图片用代码表示: import torch from torch import nn from torch.nn import Conv2d, MaxPool2d, Flatten, Linearclass SUN(nn.Module):def __init__(self):super(SUN, self).__init__()self.conv1 Conv2d(3, 32, 5, padding2)self…

RSTP的改进有哪些

华为设备生成树有几种模式? 4种模式:传统STP(802.1D)、RSTP(802.1w)、MSTP(802.1s)、VBST(基于VLAN的生成树,兼容某些厂商的每VLAN一颗生成树) A…

【大数据算法】时间亚线性算法之:串相等判定算法。

串相等判定算法 1、引言2、串相等判定算法2.1 定义2.2 核心原理2.3 应用场景2.4 算法公式2.4.1 Rabin-Karp算法2.4.2 哈希函数 2.5 代码示例 3、总结 1、引言 小屌丝:鱼哥, 啥是串相等判定算法啊 小鱼:这个… en…en… 小屌丝:咋…

Rust Linux开发人员自比道路建设者和寻路者的区别

红帽公司(Red Hat)的长期直接渲染管理器(Direct Rendering Manager,DRM)子系统维护者大卫-艾尔里(David Airlie)撰写了一篇有趣的博文,将开发人员的类型与筑路工人、寻路者与酒店进行…

swift自定义数据集微调Qwen-7B大模型,转换模型后使用ollama跑起来

前文:swift微调Qwen-7B大模型-CSDN博客 我详细介绍了swift如何进行微调,但数据集均来自魔搭社区,如何想训练自定义数据集,实际上也很简单。 一、自定义数据集微调 export MKL_THREADING_LAYERGNU \ CUDA_VISIBLE_DEVICES0,1,2…

本地编写Markdown格式文件,浏览器查看

编写准备 下载VsCode并安装,打开后在内部安装Markdown All in One、Markdown Preview Enhanced、Paste Image三个插件。新建一个文件夹用以后期保存你的笔记等文件在左侧新建文件,.md结尾,即完成创建右侧可实时的查看你的编写结果&#xff0…

大模型赋能风控运营:效率跃升的密码

一、大模型助力风控运营的背景与趋势 大模型兴起的背景 随着金融行业的迅速发展和数据量的爆炸式增长,传统的风控运营手段逐渐难以满足复杂多变的风险形势。大数据、人工智能等技术的不断进步,为大模型在风控运营领域的应用提供了技术支撑。金融机构面…

【算法】演员~评论家方法

一、引言 演员-评论家算法(Actors-Critics Method)是一种用于并发编程中的同步机制,用于解决多线程环境下的资源竞争问题。与传统的锁和信号量等同步工具不同,演员-评论家方法采用更加灵活的协作策略。算法结合了策略梯度&#xf…

PyQt5:pycharm设置及使用

前言 PyQt5 是一个用于创建图形用户界面的 Python 库,它是 Qt 应用程序框架的 Python 绑定。Qt 是一个广泛使用的跨平台 C 框架,PyQt5 允许开发者使用 Python 编写图形界面应用程序,而不必直接使用 C。 为了方便地使用它,我尝试在…

【MySQL进阶之路】数据库的操作

目录 创建数据库 字符集和校验规则 查看数据库支持的字符集 查看数据库支持的字符集校验规则 指定字符集和校验规则 在配置文件中配置 查看数据库 显示创建语句 修改数据库 删除数据库 数据库的备份和恢复 备份整个数据库 备份特定表 备份多个数据库 备份所有数据…

【大模型】LangChain基础学习

前言:LangChain是一个用于构建端到端语言模型应用的框架 目录 1. 基础知识2. 基本使用2.1 安装2.2 启动示例2.3 使用prompt2.4 输出解析器 3. 相关应用3.1 RAG 参考文献 1. 基础知识 六大组件 模型(Models):包含各大语言模型的LangChain接口…

Redis从入门到入门(上)

1.Redis概述 文章目录 1.Redis概述1.1 什么是Redis1.2 Redis的应用场景 2.Linux下Redis的安装与使用2.1 Redis下载2.2 Redis的启动2.3 Redis配置2.4 连接Redis 1.1 什么是Redis Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库&#xff0…

MATLAB生成COE文件

MATLAB代码 % 参数设置 N 4096; % 数据点数量 t linspace(0, 2*pi, N); % 时间向量 width 12; % 位宽% 正弦波,幅度在0到5之间 sine_wave 2.5 * sin(t) 2.5;% 三角波,幅度在0到5之间 tri_wave 5 * (1 - abs(mod(t/(2*pi)*4, 2) - 1));% 方波&…

springboot集成七牛云上传文件

大体思路 上传 前端上传MultipartFile file 文件 进行名字空值校验和格式校验,大概就是判断后缀是不是属于jpg.png 生成唯一uuid名称,然后拿着这个文件名和图片文件File调接口 接口参数为 输入流inputstream,将file化流传输文件名上传t…

多线程+连接池+代理 运行一段时间线程阻塞,如何解决??

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收…

<Rust>egui学习之小部件(四):如何在窗口中添加滚动条Scroll部件?

前言 本专栏是关于Rust的GUI库egui的部件讲解及应用实例分析,主要讲解egui的源代码、部件属性、如何应用。 环境配置 系统:windows 平台:visual studio code 语言:rust 库:egui、eframe 概述 本文是本专栏的第四篇博…

今日算法:蓝桥杯基础题之“切面条”

你好同学,我是沐爸,欢迎点赞、收藏、评论和关注!个人知乎 从今天开始,一起了解算法,每日一题,从 JavScript 的技术角度进行解答,如果你对算法也感兴趣,请多多关注哦。 问题描述 一…

【深度学习与NLP】——深度卷积神经网络AlexNet

目录 一、卷积神经网络的发展历程 二、简要介绍 三、代码实现 四、缺点和过时的地方 一、卷积神经网络的发展历程 早期理论基础阶段(20 世纪 60 年代 - 80 年代): 1968 年,Hubel 和 Wiesel 通过对猫视觉神经的研究&#xff0…

Hibernate 批量插入速度慢的原因和解决方法

由于业务需要一次性连续写入超过10k条以上的新数据,当对象超过10个成员变量以后,整个写入过程居然需要长达35秒,这个速度是不能接受的,故此研究了一下怎么开启Hibernate批量写入的功能。 我这边使用的是Hibernate 5.6.15 在网上…

Python 从入门到实战3(列表的简单操作)

我们的目标是:通过这一套资料学习下来,通过熟练掌握python基础,然后结合经典实例、实践相结合,使我们完全掌握python,并做到独立完成项目开发的能力。 上篇文章我们通过python小栗子来学习python基础知识语法&#xff…