码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 日志大文件拆分


    前言

    生产环境没设置好日志文件大小的最大值,导致日志文件过大,普通编辑器根本没法打开,要排查日志改怎么办,拆分日志大文件!

    如何拆分

    split命令专门用来将一个大文件分割成很多个小文件,我把split命令的选项做一个简要说明

    选项含义
    -b分割后的文档大小,单位是byte
    -C分割后的文档,单行最大byte数
    -d使用数字作为后缀,同时使用-a length指定后缀长度
    -l分割后文档的行数
    按照行数拆分

    假设文件test.txt有n多行,每2行拆分为一个文件,使用-l参数即可:

    1. $ split -l 2 test.txt
    2. $ ls -al
    3. -rw-r--r-- 1 root root 32 Aug 31 16:55 test.txt
    4. -rw-r--r-- 1 root root 20 Aug 31 16:55 xaa
    5. -rw-r--r-- 1 root root 12 Aug 31 16:55 xab

    仔细一看,拆分后的文件名难以描述啊。

    能不能好好命名一下呢?

    规范命名

    使用-d参数可以用数字作为新的文件后缀:

    1. $ split -l 2 test.txt -d
    2. $ ls
    3. test.txt x00 x01 x02

    还可以用-a指定后缀数字的长度(默认是2):

    1. $ split -l 2 test.txt -d -a 4
    2. $ ls
    3. test.txt x0000 x0001 x0002

    不过开头的x实在看不顺序,我们还可以指定前缀,比如指定前缀为test:

    1. $ split -l 2 test.txt -d -a 4 test
    2. $ ls
    3. test0000 test0001 test0002 test.txt

    而且你还可以从指定数字下标开始,使用--numeric-suffixes,例如从0004开始:

    1. $ split --numeric-suffixes=4 test.txt -a 4 -l 2
    2. test.txt x0004 x0005
    按照大小拆分

    使用-b参数来按照大小来拆分,单位为字节:

    $ split -b 10 test.txt
    

    当然还可以使用k(千字节),m(兆)。即:

    $ split -b 10k test.txt
    
    分割成指定数量文件

    使用-n参数即可,比如无论大小,行数,拆分为3个文件:

    1. $ split -n 4 test.txt
    2. $ test.txt xaa xab xac xad

    其它拆分文件方式 

    拆分日志文件的特定行,然后重定向到新的日志文件中

    sed实现分割

    实现原理就是用sed截取特定行之间的内容,然后进行重定向。

    1. sed -n '1,2000000p' test.log > test.log.1
    2. sed -n '2000001,4000000p' test.log > test.log.2
    3. sed -n '4000001,6000000p' test.log > test.log.3
    4. sed -n '6000001,8000000p' test.log > test.log.4
    5. sed -n '8000001,$p' test.log > test.log.5
     awk实现分割

    实现原理和sed差不多,因为使用awk不多,这里只举一个小例子:

    1. awk ‘{if (NR<120000) print $0}’ test.log > a.txt
    2. awk ‘{if (NR>=120000) print $0}’ test.log > b.txt

    参考文章:Linux下如何拆分大的日志文件?-腾讯云开发者社区-腾讯云

  • 相关阅读:
    Echarts画散点图
    FANUC机器人SRVO-050碰撞检测报警原因分析及处理对策(亲测可用)
    iOS获取当前网络连接状态WiFi、5G、4G、3G、2G
    淘宝api接口大全(参数返回值说明)
    linux常用命令(2):tar命令(压缩文件/解压缩文件)
    3.1 使用点对点信道的数据链路层
    3. 基本数据类型
    面试面经|Java开发面试JVM面试题
    springboot+vue+mysql+easyexcel实现文件导出+导出的excel单元格添加下拉列表
    [从零开始学习FPGA编程-46]:视野篇 - 集成电路的发展与技术进步
  • 原文地址:https://blog.csdn.net/w2393040183/article/details/132825534
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号