码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 利用 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 命令 | 菜鸟教程​

  • 相关阅读:
    【开发心得】记录一次自定义starter的实现
    HarmonyOS原生分析能力,即开即用助力精细化运营
    【Lilishop商城】No2-3.确定软件架构搭建二(本篇包括接口规范、日志处理)
    Windows11怎么直接显示更多选项?
    Groovy之Map操作
    JavaWeb---实验课---第8章 EL-JSTL
    一些免杀工具
    如何安全得下载官方的Notepad++
    金仓数据库 MySQL 至 KingbaseES 迁移最佳实践(3. MySQL 数据库移植实战)
    Oracle数据库:数据库操纵语言DML,插入insert into where,更新update where,删除delete where
  • 原文地址:https://blog.csdn.net/qq_38289815/article/details/126557460
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号