• 利用 Linux grep 和 awk 完成日志过滤


    导语:有时候系统的日志信息的量是很庞大的,这时要查看具体问题可能比较麻烦。此时可以过滤掉无用的日志信息,从而获取预期想获取的信息。或者在排查问题时,查看具体的某一个错误。

    Linux grep 命令用于查找文件里符合条件的字符串

    grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。

    场景:系统报警显示了时间,但是日志文件太大无法直接 cat 查看。(查询含有特定文本的文件,并拿到这些文本所在的行)

    86da5682719045588e4ba857e68e7408.png

    grep 的与或操作:

    1. grep 与操作(其实就是多次筛选)
    2.   grep k1 | grep k2
    3. grep 或操作
    4.   grep -E 'k1|k2'
    5.   egrep 'k1|k2'
    6.   awk '/k1|k2/'

    awk 是一种处理文本文件的语言,是一个强大的文本分析工具。

    3ce1648c0bc04a24824c06a13ac7f596.png08ec66d9bec24e50a75915e2b3b36c98.png

    以 test.log 的内容为例:

    1. 2022-06-1 NameError
    2. 2022-06-2 NameError
    3. 2022-06-3 NameError
    4. 2022-06-4 NameError
    5. 123
    6. 456
    7. abc
    8. def
    9. 2022-06-5 NameError
    10. 2022-06-6 NameError
    11. 2022-06-7 NameError

    读取日志中时间大于 2022-06-4 && 出现 NameError 关键字的信息,$0 表示整行文本,$1 表示输出第一列。

    1. #!/bin/bash
    2. while read line;
    3. do
    4. echo $line | grep 'NameError' \\
    5. | awk -F ' ' '{if($1 > "2022-06-4") print $0}' ;
    6. done < test.log

    此时,可以用 awk 输出到另一个文件中,结果放到 result.log :

    1. #!/bin/bash
    2. while read line;
    3. do
    4. echo $line | grep 'NameError' \\
    5. | awk -F ' ' '{if($1 > "2022-06-4") print $0}' >> result.log
    6. done < test.log

    或者用更为简单方法:

    1. #!/bin/bash
    2. # awk '{if($0~"filter-string") print}' xxx.log
    3. # 解释说明:抽取 xxx.log 整个日志文件中,包含 "filter-string" 的行,打印输出
    4. awk '{if($0~"NameError" && $1 > "2022-06-4") print}' test.log >> result.log
    5. # 要附加条件,只需要在 if 里面添加内容即可,例如:
    6. # 将 $0~"NameError" -> ($0~"NameError" || $0~"Error")

    ​参考内容:

    Linux grep 命令 | 菜鸟教程

    Linux awk 命令 | 菜鸟教程

  • 相关阅读:
    运行 Python 脚本/代码的几种方式
    MySQL死锁举例及代码如何解决
    Linux磁盘暴涨如何解决?
    协议栈——创建套接字
    机器人制作开源方案 | 行星探测车实现云端控制
    杰理的蓝牙芯片的key是什么?以及该如何添加key?杰理key文件原理
    【实验记录1】行人重识别
    FPGA刷题——跨时钟域传输(FIFO+打拍+握手)
    升级requests的方法
    Go语言函数和包介绍
  • 原文地址:https://blog.csdn.net/qq_38289815/article/details/126557460