Linux 实操 —— 日志筛选操作(sed与wc命令介绍)

引言

在处理数据交互业务场景的问题时,经常会出现需要统计日志中出现某些指定关键字的行数,或者行数,那么如何通过Linux 命令来快速统计一段时间之内,某个特定关键字出现的行数呢?这篇文章将会给你答案。

一、快速统计一段时间内特定log关键字出现行数

指令示例:

sed -n '/2019-12-28 11:26/,/2019-12-28 12:13/p' nohup.out | grep '接收到xx请求参数,开始处理' | wc -l

上面的命令中,'接收到xx请求参数,开始处理' 即特定关键字。两个时间代表筛选日志的起止位置,后面会详细介绍。

通常做这种操作的目的,就是为了根据 log 出现的行数,判断收到了多少次请求,从而进行分析和比较,比如和数据库中记录的条数进行比对,检查是否有丢包或异常未入库的情况。在实际排查问题的时候经常会用到。

注意,上述命令中用于筛选的日期一定是日志中真正出现的时间,否则无效,可以不精确,省略时间尾部即可。另外,我们一定要通过代码来确定某个 log 相对于每次请求是唯一的,如果一次请求中出现多次相同关键字 ,那么统计结果会比实际请求的行数要多。

二、sed 命令

Sed is a stream editor.  A stream editor is used to perform basic text transformations on an input stream (a file or input from a pipeline).  While in some ways similar to an editor which permits scripted edits (such as ed), sed works by making only one pass over the input(s), and is  consequently  more  efficient.  But it is sed's ability to filter text in a pipeline which particularly distinguishes it from other types of editors.

Sed 是一个流编辑器。流编辑器是使用输入流(文件或管道输入)来处理文本文件转化的工具。在某些方面有点像支持脚本编辑的编辑器(例如 ed),sed 仅基于一次输入来工作,因此也更高效。但真正与其他种类编辑器相区分的是 sed 的过滤文本的能力。

常用参数和基本语法:

sed [-hnV][-e<script>][-f<script文件>][文本文件]

参数说明

  • -e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。
  • -f<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
  • -h或--help 显示帮助。
  • -n或--quiet或--silent 仅显示script处理后的结果,屏蔽默认输出(全部文本)。
  • -V或--version 显示版本信息。

sed 中的定址符与正则表达式

在命令:sed -n '/2019-12-28 11:26/,/2019-12-28 12:13/p' nohup.out 中,用到了定址符,定址符用来定义需要操作的文本的起止位置,由 '地址1,地址2' 组成,地址可以表示为文本的行号,也可以使用正则,上面的命令用到的是正则的方式,行号的方式如下:

1、sed -n '5,10p'      输出第 5 - 10 行的日志

2、sed -n '5p,10p'    输出第5、第10行日志

p 表示基本的处理动作是打印 print 。另外还有 d 删除,s 替换字符串。

常用操作:数据的搜索显示

示例来自菜鸟教程(更多内容):搜索 /etc/passwd有root关键字的行:

> nl /etc/passwd | sed '/root/p'
1  root:x:0:0:root:/root:/bin/bash
1  root:x:0:0:root:/root:/bin/bash
2  daemon:x:1:1:daemon:/usr/sbin:/bin/sh
3  bin:x:2:2:bin:/bin:/bin/sh
4  sys:x:3:3:sys:/dev:/bin/sh
5  sync:x:4:65534:sync:/bin:/bin/sync

(补充:nl (Number of Lines) 将指定的文件添加行号标注后写到标准输出。如果不指定文件或指定文件为"-" ,程序将从标准输入读取数据。)

上述示例,如果找到 root ,不仅会输出匹配行,也会输出所有行。为了只输出匹配的行,必须要加上 -n 参数。因此在一般的搜索场景下,-n 基本都是必选参数

三、wc 命令

Print  newline,  word,  and byte counts for each FILE, and a total line if more than one FILE is specified.  With no FILE, or when FILE is -, read standard input.  A word is a non-zero-length sequence of characters delimited by white space.  The options below may be used to select  which  counts  are  printed, always in the following order: newline, word, character, byte, maximum line length.

打印每个文件的换行、字和字节的数量,指定多个文件则为所有行。如果没有文件,或文件是 “-” ,就从标准输入中读取。字是由空格分隔的长度非0的字符序列。下面的选项可以用于选择打印哪种计数,通常按照下面顺序打印:行数、字数、字符数、字节数、最大行数。

简单来说,wc 就是输出文本内容的统计信息。

常用参数:

  • -c 或--bytes或--chars 只显示Bytes数。
  • -l 或--lines 只显示行数。
  • -w 或--words 只显示字数。
  • --help 在线帮助。
  • --version 显示版本信息。

示例: 

> nl testwc.txt 1  Linux networks are becoming more and more common, but scurity is often an overlooked  2  issue. Unfortunately, in today’s environment all networks are potential hacker targets,  3  fro0m tp-secret military research networks to small home LANs.  4  Linux Network Securty focuses on securing Linux in a networked environment, where the  5  security of the entire network needs to be considered rather than just isolated machines.  6  It uses a mix of theory and practicl techniques to teach administrators how to install and  7  use security applications, as well as how the applcations work and why they are necesary. 
> wc testwc.txt7  92 608 testwc.txt

也可以统计多个文件:

> wc testwc.txt wcFile.json 7  92 608 testwc.txt3  34 244 wcFile.json10 126 852 total

参考资料

《Linux sed 命令》

《Linux wc 命令》

《sed命令详解+示例》

《Linux日志筛选命令》

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

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

相关文章

Java 注解知识总结

引言 本博客总结自《Java 编程思想》第 20 章。 一、什么是注解 注解是 Java 5 引入的一种通过反射机制实现的语法特性&#xff0c;开发者可以通过在类、域、方法等元素前面标记一个“标签”达到对程序的源码、类信息或运行时进行某种说明或处理的效果&#xff0c;尽可能地简…

Linux 实操 —— Linux 系统性能分析

引言 最近配合解决压测&#xff08;性能测试&#xff09;方面的问题&#xff0c;了解到了一些可以监控 Linux 系统性能指标&#xff0c;如CPU、IO、内存等的工具。 此篇博客主要讲解 Linux 系统监控的一些重点内容以及 sar 命令的使用。 一、Linux 性能分析聚焦 Linux 性能…

Java 动态代理解析

引言 本博客总结自《Java 编程思想》第十四章 一、实现第一个动态代理程序 代理是软件设计中重要的设计思想&#xff0c;它允许我们在调用实际操作之前或之后解耦式地编写额外的操作&#xff0c;而一旦不需要这些操作了&#xff0c;就可以轻易的移除它们。 浏览了《编程思想…

MySQL 基础 ————高频函数总结

一、MySQL函数调用方式 函数调用的基本语法&#xff1a; SELECT 函数(实参列表) [FROM 表] 其中&#xff0c;对于函数&#xff0c;需要重点关注三点&#xff1a; 1、函数的名称 2、参数列表 3、函数功能 二、函数的分类 在 MySQL中&#xff0c;函数分为两类&#xff1a;1、…

MySQL 高级 —— 复合索引简介(多列索引)

引言 复合索引是指包含多个数据列的索引&#xff0c;与之概念相对的是单列索引&#xff0c;仅包含一个数据列。在大多数情况下&#xff0c;建立多列索引的好处都要多于单列索引。另外&#xff0c;复合索引最多支持16个列&#xff0c;但请一定不要让复合索引包含太多的列&#…

MySQL 优化 —— SQL优化概述(优化专题开篇词)

引言 最近为了研究索引的知识&#xff0c;特地去MySQL 官网研读了一番&#xff0c;发现MySQL官网有比较全面的MySQL优化方案和知识背景&#xff0c;所以希望通过一系列文章&#xff0c;将官网的知识翻译总结一下&#xff0c;避免日后去网上胡乱搜索产生不必要的知识勘误风险。…

MySQL 优化 —— WHERE 子句优化

引言 本文翻译自 MySQL 官网&#xff1a;WHERE Clause Optimization WHERE 子句优化 这一部分我们来讨论对 WHERE 子句的优化处理。本部分的案例都是以 SELECT 语句为例&#xff0c;但这些优化同样适用于 DELETE 和 UPDATE 语句中的 WHERE 子句。 注意 因为对 MySQL 优化器的…

MySQL 优化 —— IS NULL 优化

引言 本博客翻译自 MySQL 官网&#xff1a;IS NULL Optimization&#xff0c; MySQL版本 5.7。 MySQL 对 IS NULL 的优化 MySQL 可以对 IS NULL 执行和常量等值判断&#xff08;列名 常量表达式&#xff0c;如name Tom&#xff09;相同的优化。MySQL 可以利用索引和范围来…

MySQL 优化 —— ORDER BY 优化

引言 本文翻译自MySQL 官网&#xff1a;ORDER BY Optimization&#xff0c;MySQL 版本&#xff1a;5.7。 这一部分描述了MySQL何时会使用索引来满足order by子句&#xff0c;filesort 操作会在索引不能生效的时候被用到&#xff0c;以及优化器对order by的执行计划信息。 or…

MySQL 高级 —— 索引实现的思考

引言 最近看了一个公开课&#xff0c;是有关MySQL对索引设计的思考。详细讲解了几种索引实现的设计思考与利弊辨析&#xff0c;讨论了为什么MySQL默认情况下会使用B树索引&#xff0c;B树索引又对B树做了哪些结构改进。 本片博客通过个人的学习理解和总结&#xff0c;由几种简…

MySQL 优化 —— MySQL 如何使用索引

引言 本文翻译自MySQL 官网 &#xff1a;How MySQL Uses Indexes &#xff0c;MySQL 版本 5.7 。 提升 SELECT 操作性能最好的方式就是在查询的一列或多列上建立索引。索引的行为类似指向表数据的指针&#xff0c;可以让查询能够快速判断哪个记录满足 WHERE 子句中的条件&…

MySQL 优化 —— EXPLAIN 执行计划详解

引言 本博客大部分内容翻译自MySQL 官网 Understanding the Query Execution Plan 专题。另外有一些补充&#xff0c;则来自于网课以及《高性能MySQL&#xff08;第三版&#xff09;》。 根据我们的表、字段、索引、以及 where 子句中的条件等信息&#xff0c;MySQL 优化器会…

Git 初学札记(十)—— Reset 回退的三种状态解析

引言 工作中经常会涉及到需要本地代码覆盖更新的操作。有时候可能是从远端git 上直接覆盖更新&#xff0c;或者是其他本地分支覆盖更新当前分支等等。这个时候就需要用到 reset 操作。 reset 操作分为三种类型&#xff1a;Soft、Mixed、Hard。今天我们就来说说这三种类型究竟…

MySQL 高级 —— 深入理解 InnoDB 与 MyISAM

引言 在文件系统中&#xff0c;MySQL将每个数据库&#xff08;也可以称之为schema&#xff09;保存为数据目录下的一个子目录。创建表时&#xff0c;MySQL会在数据库子目录下创建一个与表同名的.frm文件保存表的定义。因为MySQL使用文件系统的目录和文件来保存数据库和表的定义…

Ts声明ElementUI控件

初用Ts&#xff0c;有时候想获取三方控件不太会声明类型&#xff0c;记录一下使用InstanceType导入类型 例如声明一个el-select <el-form-item label"类型:" prop"year" :loading"state.loading"><el-select v-model"props.ruleF…

关于 OutOfMemoryError 的总结与解决方法

引言 本文总结自周志明的《深入理解Java虚拟机》第二章部分内容。 这部分内容&#xff0c;可以为后续性能调优方面的工作起到铺垫作用。 一、什么是 OutOfMemoryError OurOfMemory 简称“OOM”&#xff0c; 直译为“内存耗尽”或“内存溢出”&#xff0c;当然&#xff0c;并…

Windows误关闭资源管理器重启的办法

引言 有时候Windows系统在开机后&#xff0c;在桌面底部的任务栏中无法正常加载必要的网络连接图标或音量图标等&#xff0c;导致无法手动操作音量或连接网络。这时候就会需要打开“任务管理器”重新启动“资源管理器”使其重新加载这些必要的控制图标。 但是由于操作失误&am…

MySQL高级 —— 高性能索引

引言 最近一直在抱着《高性能MySQL&#xff08;第三版&#xff09;》研究MySQL相关热点问题&#xff0c;诸如索引、查询优化等&#xff0c;这阶段的学习是前一段时间MySQL基础与官方的“阅读理解”的进一步延伸。 书中第五章详细阐述了如何设计高性能的索引&#xff0c;以及索…

MySQL高级 —— 查询性能优化

引言 承接《MySQL高级 —— 高性能索引》&#xff0c;本篇博客将围绕《高性能MySQL&#xff08;第三版&#xff09;》第六章内容进行总结和概括。 与索引的部分一样&#xff0c;SQL优化也是广大程序员深入MySQL的又一条必经之路。希望通过本篇博客的总结&#xff0c;能够为我…

哈希表的大小为何最好是素数

引言 为什么散列函数采用取模运算&#xff1f;又为什么取模运算的被取模数最好是素数&#xff1f;素数是如何在取模运算中很好的规避冲突的&#xff1f; 这些问题可能困扰诸多程序员很久了。我们总是说素数可以更好的避免冲突&#xff0c;但总是对各种长篇大论的分析望而却步…