Linux sed命令
目录
- 一. 去除单个指定文本的换行符
- 二. 去除多个指定文本的换行符
- 三. 抽取出指定数据
- 3.1 分别抽取SPLREQUEST和SPLEND的数据
- 3.2 通过join命令将文件合并
- 3.3 抽取出指定的数据
- 3.4 去除换行符,整合数据为一行
一. 去除单个指定文本的换行符
👉 info.txt
Some text before
2023 Some text after
Another 2023 line with 2023
20232023A line with consecutive 2023
Last line 2023
⏹解析
:loop; N; $!b loop;
用于循环整个文件s/\n2023/ 2023/g
用于替换,将换行符2023
替换为空格2023
cat info.txt | sed ':loop; N; $!b loop; s/\n2023/ 2023/g'
💪效果
Some text before 2023 Some text after
Another 2023 line with 2023 20232023A line with consecutive 2023
Last line 2023
二. 去除多个指定文本的换行符
👉 a.txt
Start 2023-11-05 05:15:10
eventController=enent1
MemberId=uuidw3e
ExecTime=1000
Start 2023-11-05 05:17:10
eventController=enent2
MemberId=uuidA234
ExecTime=2000
⏹解析
s/\n\([eME]\)/ \1/g
用于将 换行符e开头的数据,换行符M开头,换行符E开头的数据的换行符去掉,并添加一个空格。
cat ./a.txt | sed ':loop; N; $!b loop; s/\n\([eME]\)/ \1/g'
💪效果
Start 2023-11-05 05:15:10 eventController=enent1 MemberId=uuidw3e ExecTime=1000
Start 2023-11-05 05:17:10 eventController=enent2 MemberId=uuidA234 ExecTime=2000
三. 抽取出指定数据
如下所示,程序运行后生成了如下log
- 开头的数字(110120,123456等)代表了线程号
SPLREQUEST
表示请求的开始,SPLEND
表示请求的终了。同一个请求的SPLREQUEST和SPLEND的线程号相同。- 因为系统上线运行后,同一时刻可能会存在多个并发请求,所以同一个请求在同一个时刻打印的log可能分布在日志文件的不同的地方。
- 我们可以根据线程号将同一个请求的SPLREQUEST和SPLEND相关的数据聚合到同一行,然后进行处理。
👉 20231126-2.log
110120 SPLREQUEST 内容1 AAA memberID=1 eventController=event1
110120 SPLEND ExecTime=200 ResultCode=200
123456 SPLEND ExecTime=300 ResultCode=200123456 SPLREQUEST 内容2 BBB memberID=2 eventController=event2
123444 SPLREQUEST 内容3 CCC memberID=3 eventController=
123434 SPLREQUEST 内容4 DDD memberID= eventController=event4123444 SPLEND ExecTime=200 ResultCode=200
123434 SPLEND ExecTime=400 ResultCode=200
345345 SPLEND ExecTime=500 ResultCode=200
345345 SPLREQUEST 内容5 EEE memberID=5 eventController=event5
674545 SPLREQUEST 内容6 FFF memberID=6 eventController=event6674545 SPLEND ExecTime=400 ResultCode=200
3.1 分别抽取SPLREQUEST和SPLEND的数据
- 在日志文件中,请求开始的日志和请求结束的日志所在的位置都是错乱无规律的。
- 我们可以先将请求开始相关的数据抽取到一个文件中
- 再将请求终了的相关的数据抽取到一个文件中
- 再将上述得到的两个文件合并
⏹将SPLREQUEST
相关的数据抽取到文件中
grep SPLREQUEST ./20231126-2.log > SPLREQUEST.txt
SPLREQUEST.txt
110120 SPLREQUEST 内容1 AAA memberID=1 eventController=event1
123456 SPLREQUEST 内容2 BBB memberID=2 eventController=event2
123444 SPLREQUEST 内容3 CCC memberID=3 eventController=
123434 SPLREQUEST 内容4 DDD memberID= eventController=event4
345345 SPLREQUEST 内容5 EEE memberID=5 eventController=event5
674545 SPLREQUEST 内容6 FFF memberID=6 eventController=event6
⏹将SPLEND
相关的数据抽取到文件中
grep SPLEND ./20231126-2.log > SPLEND.txt
SPLEND.txt
110120 SPLEND ExecTime=200 ResultCode=200
123456 SPLEND ExecTime=300 ResultCode=200
123444 SPLEND ExecTime=200 ResultCode=200
123434 SPLEND ExecTime=400 ResultCode=200
345345 SPLEND ExecTime=500 ResultCode=200
674545 SPLEND ExecTime=400 ResultCode=200
3.2 通过join命令将文件合并
⏹由于请求开始和请求终了日志的线程号都是相同的,且都在第一列,因此可以通过join命令将两个文件通过线程号连接起来
join SPLREQUEST.txt SPLEND.txt > ALL.txt
ALL.txt
110120 SPLREQUEST 内容1 AAA memberID=1 eventController=event1 SPLEND ExecTime=200 ResultCode=200
123456 SPLREQUEST 内容2 BBB memberID=2 eventController=event2 SPLEND ExecTime=300 ResultCode=200
123444 SPLREQUEST 内容3 CCC memberID=3 eventController= SPLEND ExecTime=200 ResultCode=200
123434 SPLREQUEST 内容4 DDD memberID= eventController=event4 SPLEND ExecTime=400 ResultCode=200
345345 SPLREQUEST 内容5 EEE memberID=5 eventController=event5 SPLEND ExecTime=500 ResultCode=200
674545 SPLREQUEST 内容6 FFF memberID=6 eventController=event6 SPLEND ExecTime=400 ResultCode=200
3.3 抽取出指定的数据
⏹抽取出线程号,memberID,eventController,ExecTime。
-o
表示 只显示匹配到的数据^\S*
表示 非空开头的数据,在此案例中特指线程号
grep -o -a -e "^\S*" -e "eventController=\S*" -e "memberID=\S*" -e "ExecTime=\S*" ALL.txt > pick_data.txt
pick_data.txt
110120
memberID=1
eventController=event1
ExecTime=200
123456
memberID=2
eventController=event2
ExecTime=300
123444
memberID=3
eventController=
ExecTime=200
123434
memberID=
eventController=event4
ExecTime=400
345345
memberID=5
eventController=event5
ExecTime=500
674545
memberID=6
eventController=event6
ExecTime=400
3.4 去除换行符,整合数据为一行
cat pick_data.txt | sed ':loop; N; $!b loop; s/\n\([emE]\)/ \1/g'
110120 memberID=1 eventController=event1 ExecTime=200
123456 memberID=2 eventController=event2 ExecTime=300
123444 memberID=3 eventController= ExecTime=200
123434 memberID= eventController=event4 ExecTime=400
345345 memberID=5 eventController=event5 ExecTime=500
674545 memberID=6 eventController=event6 ExecTime=400
相关文章:
Linux sed命令
目录 一. 去除单个指定文本的换行符二. 去除多个指定文本的换行符三. 抽取出指定数据3.1 分别抽取SPLREQUEST和SPLEND的数据3.2 通过join命令将文件合并3.3 抽取出指定的数据3.4 去除换行符,整合数据为一行 一. 去除单个指定文本的换行符 👉 info.txt …...

Nginx反向代理实现负载均衡+Keepalive实现高可用
目录 实现负载均衡 实现高可用 实现负载均衡 Nginx的几种负载均衡算法: 1.轮询(默认) 每个请求按照时间顺序逐一分配到下游的服务节点,如果其中某一节点故障,nginx 会自动剔除故障系统使用户使用不受影响。 2.权重…...

实用高效 无人机光伏巡检系统助力电站可持续发展
近年来,我国光伏发电行业规模日益壮大,全球领先地位愈发巩固。为解决光伏电站运维中的难题,浙江某光伏电站与复亚智能达成战略合作,共同推出全自动无人机光伏巡检系统,旨在提高发电效率、降低运维成本,最大…...
Django框架之csrf跨站请求
目录 一、csrf跨站请求伪造详解 二、csrf跨域请求伪造 【1】正常服务端 【2】钓鱼服务端 三、csrf校验 【介绍】 form表单中进行csrf校验: 【1】form表单如何校验 【2】ajax如何校验 四、csrf相关装饰器 【1】csrf_protect装饰器: 【…...
[系统移植] 移植主线Buildroot(2023.02-rc3)到RK3399
文章目录 一、编译环境二、Git环境三、克隆源代码四、编译源代码五、烧录固件六、系统启动一、编译环境 PC 机用的是 Ubuntu 18.04,执行以下命令安装必要工具: sudo apt install gcc build-essential bison flex gettext tcl sharutils libncurses-dev zlib1g-dev \ exube…...

自动语音识别 支持86种语言 Dragon Professional 16 Crack
从个体从业者到全球组织,文档密集型行业的专业人士长期以来一直依靠 Dragon 语音识别来更快、更高效地创建高质量文档,减少管理开销,以便他们能够专注于客户。了解 Dragon Professional v16 如何通过单一解决方案提高标准,为各个业…...

i社为什么不出游戏了?
I社,即国际知名的游戏公司,近来为何鲜有新游问世?曾经风靡一时的游戏开发者,如今为何陷入了沉寂?这其中的种种原因,值得我们深入剖析。 首先,I社近期的沉寂可能与其内部管理层的调整和战略规划…...

Harmony开发 eTs公共样式抽取
Harmony系统开发使用eTs开发过程中对于样式相同且重复使用的样式可以抽取成公共样式循环利用,类似于android的style样式。 import router from ohos.router import cryptoFramework from ohos.security.cryptoFramework; import prompt from system.prompt class L…...
Java中的方法
在Java中,方法是一个重要的概念,它用于组织和执行可重复使用的代码块。本文将详细介绍Java中方法的概念、定义和使用方法,以及一些常见的编程技巧和注意事项。 一、方法的概念 在Java中,方法是用来执行特定任务的代码块。它封装了…...

存算一体还是存算分离?谈谈数据库基础设施的架构选择
从一则用户案例说起 某金融用户问,数据库用服务器本地盘性能好还是外置存储好?直觉上,本地盘路径短性能应该更好。然而测试结果却出乎意料:同等中等并发压力,混合随机读写模型,服务器本地SSD盘合计4万 IOPS…...
go模版引擎的使用~~
go模板语句 以下是一些go语言模板引擎的一些简单知识和使用 基础语法 重要!!!: 模板在写动态页面的网站的时候,我们常常将不变的部分提出成为模板,可变部分通过后端程序的渲染来生成动态网页࿰…...
我们为什么要进行敏捷开发培训
敏捷开发是一种以人为核心、迭代、循序渐进的软件开发方法。它强调团队合作、客户需求和适应变化。进行敏捷开发培训其实有多种原因,我整理了一些,可以作为参考: 理解敏捷原则和实践: 敏捷开发不仅是一种方法论,更是一…...

【算法萌新闯力扣】:合并两个有序链表
力扣题目:合并两个有序链表 开篇 今天是备战蓝桥杯的第24天及算法村开营第2天。根据算法村的讲义,来刷链表的相关题目。今天要分享的是合并两个有序链表。 题目链接: 21.合并两个有序链表 题目描述 代码思路 通过创建一个新链表,然后遍历…...

BEV+Transformer架构加速“上车”,智能驾驶市场变革开启
BEVTransformer成为了高阶智能驾驶领域最为火热的技术趋势。 近日,在2023年广州车展期间,不少车企及智能驾驶厂商都发布了BEVTransformer方案。其中,极越01已经实现了“BEVTransformer”的“纯视觉”方案的量产,成为国内唯一量产…...
Java中的jvm——面试题+答案(JVM的一些高级概念、调优技巧、垃圾回收算法等)——第13期
当涉及到Java虚拟机(JVM)时,面试官可能涉及更深入的问题,涵盖性能调优、垃圾回收算法、类加载机制等方面。 什么是类加载机制?请解释类加载的过程。 答案: 类加载是将类的.class文件加载到内存中的过程&…...

Android修行手册-ViewPager定制页面切换以及实现原理剖析
Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分…...

Mycat实现读写分离
Mycat实现读写分离 Mycat支持MySQL主从复制状态绑定的读写分离机制。这里实现的也是基于MySQL主从复制的读写分离。 MySQL主从复制配置 首先要配置MySQL的主从复制,这里配置的是一主一次从。可以参考下面的文章。 https://blog.csdn.net/wsb_2526/article/detail…...

Ceph----CephFS文件系统的使用:详细实践过程实战版
CephFS 介绍 是一个基于 ceph 集群 且兼容 POSIX 标准的文件系统。 创建 cephfs 文件系统时 需要在 ceph 集群中添加 mds 服务,该服务 负责处理 POSIX 文件系统中的 metadata 部分, 实际的数据部分交由 ceph 集群中的 OSD 处理。 cephfs 支持以内核模块…...
python tkinter 使用(七)
python tkinter 使用(七) 本篇文章主要讲下tkinter 中的message 控件. Message控件可以用于在窗口中显示一段文本消息. 以下是个简单的例子: #!/usr/bin/python3 # -*- coding: UTF-8 -*- """Author: zhTime 2023/11/24 上午11:38 .Email:Describe: "…...

17. Python 数据库操作之MySQL和SQLite实例
目录 1. 简介2. 使用PyMySQL2. 使用SQLite 1. 简介 数据库种类繁多,每种数据库的对外接口实现各不相同,为了方便对数据库进行统一的操作,大部分编程语言都提供了标准化的数据库接口,用户不需要了解每种数据的接口实现细节&#x…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...

Unity UGUI Button事件流程
场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...
云原生周刊:k0s 成为 CNCF 沙箱项目
开源项目推荐 HAMi HAMi(原名 k8s‑vGPU‑scheduler)是一款 CNCF Sandbox 级别的开源 K8s 中间件,通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度,为容器提供统一接口,实现细粒度资源配额…...

算术操作符与类型转换:从基础到精通
目录 前言:从基础到实践——探索运算符与类型转换的奥秘 算术操作符超级详解 算术操作符:、-、*、/、% 赋值操作符:和复合赋值 单⽬操作符:、--、、- 前言:从基础到实践——探索运算符与类型转换的奥秘 在先前的文…...
算法250609 高精度
加法 #include<stdio.h> #include<iostream> #include<string.h> #include<math.h> #include<algorithm> using namespace std; char input1[205]; char input2[205]; int main(){while(scanf("%s%s",input1,input2)!EOF){int a[205]…...

vxe-table vue 表格复选框多选数据,实现快捷键 Shift 批量选择功能
vxe-table vue 表格复选框多选数据,实现快捷键 Shift 批量选择功能 查看官网:https://vxetable.cn 效果 代码 通过 checkbox-config.isShift 启用批量选中,启用后按住快捷键和鼠标批量选取 <template><div><vxe-grid v-bind"gri…...
十二、【ESP32全栈开发指南: IDF开发环境下cJSON使用】
一、JSON简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,具有以下核心特性: 完全独立于编程语言的文本格式易于人阅读和编写易于机器解析和生成基于ECMAScript标准子集 1.1 JSON语法规则 {"name"…...