Linux Grep案例

news2024/11/15 17:41:31

目录

  • 一. 查询两个文件第一列的数据并去重
  • 二. 抽取日志中指定的字段
  • 三. 服务器指定时间点异常查询
  • 四. 从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-47789
       5 /logback/c1Ae12a/tomcat/current/logs/spl/.2024033109mpl_test2_app.log:03210154-24389
       3 /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.coloradmin.cn/o/2093267.html

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

相关文章

【最新华为OD机试E卷】空栈压数(200分)-多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-E/D卷的三语言AC题解 💻 ACM金牌🏅️团队| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,…

2024上海初中生古诗文大会备考:单选题真题和每道题独家解析

新的学年已经开始了,距离2024年初中生古诗文大会初选的线上自由报名选拔还有2个月(官宣11月3日线上初选正式开赛),据好真题了解,有一些学校的老师已经开始准备校内选拔了,以古诗文大会作为一个抓手&#xf…

torch、torchvision、torchtext版本兼容问题

1、torch与torchtext版本兼容 参考torchtext PyPI 2、 torch与torchvision版本兼容 参考torchvision PyPI

喜羊羊做Python真题

以下内容,皆为原创,制作实属不易,感谢大家的关注和点赞。 一.全局变量和局部变量 首先,全局变量是ls和lt。我们可以看到,函数内部lt列表的值 赋值 给了ls的列表。在定义的函数里面,ls是局部变量&#xff…

云同步的使用

云同步技术是一种在多个设备或系统之间保持数据一致性的技术,它通常依赖于云存储服务来实现。在Java中,实现云同步功能通常需要与云服务提供商的API进行交互,如Amazon S3、Google Cloud Storage、Microsoft Azure Blob Storage等。 以下是一个…

报错:java:程序包org.springframework.boot不存在

Date: 2024.08.31 18:01:20 author: lijianzhan 简述:关于java:程序包org.springframework.boot不存在问题如何进行修复。 操作如下: 点击左侧菜单栏选择设置,弹框内选择构建,执行,部署----->构建工具点击Maven按键&#xf…

python实战三-提取Word数据到Excel

视频源码: 链接:https://pan.quark.cn/s/83db5bb15383 一个文件夹下有大量会议通知文件,为word文件,文件格式都是一致的,现在要将文件中的一些字段提取出来汇总到Excel文件中。 会议通知文件格式如下: 要提…

Arthas线上诊断神器-如何安装?

文章目录 一、快速安装 ✅二、springboot-启动器 ✅ 一、快速安装 ✅ 第一种方式:通过下载arthas-boot.jar,然后用 java -jar 的方式启动~ 第一步、下载arthas-boot.jar curl -O https://arthas.aliyun.com/arthas-boot.jar如果下载速度比较…

Linux镜像文件调整分区大小

本文介绍Linux镜像文件调整分区大小。 嵌入式系统在安装完Linux系统,磁盘通常默认只划分了2个分区,一个启动分区(boot分区),一个根文件系统分区(rootfs分区)。有时,我们想划分一个独…

java打包混淆插件proguard

java代码混淆工具ProGuard混淆插件:https://blog.csdn.net/yinjl123/article/details/138922335 ProGuard Maven Plugin 使用指南:https://blog.csdn.net/gitblog_00427/article/details/141350545 ProGuard Maven Plugin 踩坑记 ProGuard代码混淆器如何…

火爆全网的扩散模型(Diffusion Model)到底是什么?只看这篇就够了!绝对通俗易懂!草履虫看完都要点头!| 附完整代码 + 详细注释

最近在做蛋白从头设计相关研究,看了超多文献(后面也想慢慢把它们分享出来嘿嘿嘿)!发现现在最新的模型其实多数都是基于扩散模型(Diffusion Model),既然如此,依据咱们要知道的尿性&am…

【Python进阶】学习Python必须要安装PyCharm。一篇文章带你总结一下安装PyCharm的注意事项,文末附带PyCharm激活码!!!

PyCharm激活码(文末附带精品籽料): K384HW36OB-eyJsaWNlbnNlSWQiOiJLMzg0SFczNk9CIiwibGljZW5zZWVOYW1lIjoibWFvIHplZG9uZyIsImxpY2Vuc2VlVHlwZSI6IlBFUlNPTkFMIiwiYXNzaWduZWVOYW1lIjoiIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN0cmljdG…

ComfyUI的优势+安装+基础介绍,干货内容,建议收藏!!!

简介 ComfyUI是一个基于节点流程的稳定扩散操作界面,通过流程实现了更加精准的工作流定制和完善的可复现性。 ComfyUI 与Webui 的区别: 一,界面设计: Web UI提供了直观友好的图形界面,适合初学者和非技术人员使用。…

JSON数据的解析与生成:深入Python的实践与应用

目录 一、JSON基础 1.1 JSON简介 1.2 Python中的JSON处理 二、解析JSON字符串到Python字典 2.1 使用json.loads()函数 2.2 异常处理 三、将Python字典转换为JSON字符串 3.1 使用json.dumps()函数 3.2 格式化输出 3.3 将Python对象写入文件 四、将Python对象写入JSON…

P01-何谓Java方法

P01-何谓Java方法 一、System.out.println()分析 二、剖析方法 谈到方法,我就突然想到了c函数: 其实:Java 方法和 C 函数在许多方面确实有类似之处,但它们也存在一些显著的差异。下面是它们的一些共同点和不同点: 共同…

POS机的接口

联迪的POS机 读取付款方式 private void Form_MisPos_Load(object sender, EventArgs e) { List<Trans> list MisPos.GetTransList(); int col 0; int y 15; int colcount 3; Panel p panel3;…

vben:对话框组件

本文将介绍如何在vben admin vue 框架中&#xff0c;创建对话框组件&#xff0c;并成功应用的代码。代码即插即用。 结果如下图所示&#xff0c; 一、创建对话框组件 创建 myModal/index.vue <template><div><BasicModalregister"registerModal"v-…

探索《黑神话:悟空》背后的编程技术

《黑神话&#xff1a;悟空》作为一款备受期待的动作角色扮演游戏&#xff0c;以其卓越的视觉效果和流畅的游戏体验吸引了全球玩家的关注。这款游戏不仅在艺术设计和技术实现上展现了极高的水准&#xff0c;其背后的编程技术更是保证了游戏顺利运行和出色表现的关键因素。在这篇…

马铃薯叶片病害识别系统+Python+图像识别+人工智能+深度学习+卷积神经算法+计算机课设项目

一、介绍 马铃薯叶片病害识别系统。本项目使用Python作为主要开发语言&#xff0c;基于TensorFlow等深度学习框架搭建ResNet50卷积神经算法网络模型&#xff0c;通过对收集到的3种常见的马铃薯叶片病害数据集&#xff08;‘早疫病’, ‘健康’, ‘晚疫病’&#xff09;进行训练…