linux 提取日志字段,记一次Linux下提取MySQL日志关键字段
8種機械鍵盤軸體對比
本人程序員,要買一個寫代碼的鍵盤,請問紅軸和茶軸怎么選?
環境說明
操作系統:centos7
sed版本:4.2.2
egrep版本:2.20
paste版本:8.22
提取要求
一次同事說,需要提取MySQL日志的關鍵字段,叫我幫忙,每一行一定包含4個或者7個字段,下面是字段例子
IP(特殊處理為內網IP):192.168.1.1
時間:2018-07-07 19:10:18
文件絕對路徑:/home/hms/data/c/rec_pub_73_c/TVOD/88888905/224/3221229835/10000100000000060000000009130764_0.smil.20180707191000.ts
丟包時間:1.659539
上次丟包時間(不一定有):1530961817.271825
當前丟包時間(不一定有):1530961818.935411
碼率(不一定有):2540.155518
如上展示,每一行一定會包含4個字段,至于后面3個只能都是有或者都沒有
思路
1.刪除多余字段,直接得到4個或者7個字段,表達式太過復雜
2.直接過濾出7個想要的字段,因為7個字段不是每一行都出來,基本上不可能實現(至少我想不到怎么寫)
3.重組文件,把想要的字段篩選出來,文件合并,按照字段順序重組文件(待會使用這個思路)
日志樣板
點擊顯/隱內容
192.168.1.1 2018-07-07 19:10:18:935 C06B688SPC013 ts_record.c:11105 code:2 thread:11349 ts_packet_check: Warning: Stream /home/hms/data/c/rec_pub_73_c/TVOD/88888905/224/3221229835/10000100000000060000000009130764_0.smil.20180707191000.ts curr_lose_pkg_time 1.659539 sec,time 1530961817.271825 -> 1530961818.935411 second_rate 2540.155518.
192.168.1.1 2018-07-07 19:15:00:056 C06B688SPC013 ts_record.c:11600 code:2 thread:11349 ts_packet_set_status: /home/hms/data/c/rec_pub_73_c/TVOD/88888905/224/3221229835/10000100000000060000000009130764_0.smil.20180707191000.ts record successfully with total_lose_pkg_time 1.659539 sec.
192.168.1.1 2018-07-07 04:59:25:848 C06B688SPC013 ts_record.c:11105 code:2 thread:21051 ts_packet_check: Warning: Stream /home/hms/data/c/rec_pub_68_dgcp2_c/TVOD/88888888/224/3221229808/10000100000000060000000009083746_0.smil.20180707045500.ts curr_lose_pkg_time 1.920283 sec,time 1530910763.925132 -> 1530910765.848897 second_rate 2952.463135.
192.168.1.1 2018-07-07 05:00:00:067 C06B688SPC013 ts_record.c:11600 code:2 thread:21051 ts_packet_set_status: /home/hms/data/c/rec_pub_68_dgcp2_c/TVOD/88888888/224/3221229808/10000100000000060000000009083746_0.smil.20180707045500.ts record successfully with total_lose_pkg_time 1.920283 sec.
提取字段方法
1、得到 IP 時間
cat hms_log_20180707.log| egrep -o “([0-9]{1,3}.){3}[0-9]{1,3}[[:space:]][0-9]{4}(-[0-9]{2}){2}[[:space:]][0-9]{2}(:[0-9]{2}){2}”
2、得到 文件絕對路徑
cat hms_log_20180707.log | egrep -o “/home.*.ts”
3、得到 丟包時間
cat hms_log_20180707.log | egrep -o “[[:space:]][0-9]{1,3}.[0-9]{6,7}[[:space:]]sec” | egrep -o “[0-9]{1,3}.[0-9]{6,7}”
4、獲取 上次丟包時間、當前丟包時間、碼率(不一定有)
cat hms_log_20180707.log | egrep -o “sec.*” | sed “s/ ->//g” | sed “s/ second_rate//g” | sed “s/.$//g” | sed ‘s/sec,time //g’ | sed ‘s/sec//g’
這里注意一個是,這三個字段不一定有,當不存在時,匹配不到需要保留空白行
提取過程
1、得到 IP 時間
cat hms_log_20180707.log | egrep -o “([0-9]{1,3}.){3}[0-9]{1,3}[[:space:]][0-9]{4}(-[0-9]{2}){2}[[:space:]][0-9]{2}(:[0-9]{2}){2}” > hms_log_20180707.log_1
2、得到 文件絕對路徑
cat hms_log_20180707.log | egrep -o “/home.*.ts” > hms_log_20180707.log_2
3、得到 丟包時間
cat hms_log_20180707.log | egrep -o “[[:space:]][0-9]{1,3}.[0-9]{6,7}[[:space:]]sec” | egrep -o “[0-9]{1,3}.[0-9]{6,7}” > hms_log_20180707.log_3
4、獲取 上次丟包時間、當前丟包時間、碼率(不一定有)
cat hms_log_20180707.log | egrep -o “sec.*” | sed “s/ ->//g” | sed “s/ second_rate//g” | sed “s/.$//g” | sed ‘s/sec,time //g’ | sed ‘s/sec//g’ > hms_log_20180707.log_4
合成包含4或7個字段的文件
paste -d” “ hms_log_20180707.log_1 hms_log_20180707.log_2 hms_log_20180707.log_3 hms_log_20180707.log_4 | sed “s/ $//g” > hms_log_20180707.log_5
總結
以上是生活随笔為你收集整理的linux 提取日志字段,记一次Linux下提取MySQL日志关键字段的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux Command hping3
- 下一篇: python最好用的画图工具_pytho