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日志篩選命令》
總結
以上是生活随笔為你收集整理的Linux 实操 —— 日志筛选操作(sed与wc命令介绍)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 制图折断线_CAD制图初学入门之CAD标
- 下一篇: 服务端开发——云服务器的端口转发设置(S