linux split сокращает большие файлы журналов

интервью Linux
linux split сокращает большие файлы журналов

Это 8-й день моего участия в Gengwen Challenge, смотрите подробности мероприятия:Обновить вызов

Если ❤️моя статья оказалась полезной, ставьте лайк и подписывайтесь. Это самый большой стимул для меня продолжать техническое творчество.Больше статей в моем блоге

linux split сокращает большие файлы журналов

Сцены

Продолжайте работать из дома сегодня. Я отправил один в рабочую группу вчера днемmysqlРаннее предупреждение о росте нагрузки/ввода/вывода машины, исключение возникает в15:45 ~ 16:00между. Чтобы потом узнать причину, нужно посмотреть лог медленных запросовslow.logЯ только что узнал, что лог больше 8G... История начинается так图片描述

предисловие

Преамбулаподвелаgrepметод处理大文件的时候:grep 检索一次的时间消耗高,多行内容难以匹配多个关键字и т.п. сложно. Это очень грустно, что мне делать?

передумать

Очень неудобно, что делать?

Идея использования бэкенда для обработки больших объемов данных:把数据不断地细分,削峰填谷用时间换空间.
Говоря человеческими словами, так как файл большой, обрабатывать его за один раз неудобно. Затем документ равномерно делится на несколько подразделов. Обрабатывайте по одному. обрабатывается больше раз, но в среднем每次处理的数据量更小、时间更少、更迅速. лучший опыт

идеиsplit 切分文件

split обычно используется в linux文件切分方法. Он поддерживает сегментацию по строке, размеру и т. д.

Синтаксис команды разделения следующий:split [-a ][-b][-C ][-l ][被切割文件路径][输出文件名前缀]

Конкретные параметры следующие:

-a, --suffix-length=N
    使用的后缀长度 (默认为 2)
-C, --line-bytes=SIZE
    每个输出文件每行的最大字节大小
-d, --numeric-suffixes
    输出文件使用数字后缀代替字母后缀(默认:字母后缀)

-b, --bytes=SIZE
    输出每个文件的大小
-l, --lines=NUMBER
    输出每个文件的内容行数

Разделять большие файлы

Вот несколько примеров:

сокращение размера файла

будетslow3306_9105.logФайлы Разделить на несколько файлов по размеру файла (10 м на файл)

$ split -b 10m slow3306_9105.log
$ ls
slow3306_9105.log  xaa  xab  xac  xad  xae

Установите имя выходного файла

выше выглядитxaa xab xac xad xaeэто выходной файл, но не интуитивно понятный.
Таким образом, вы также можете установить имя выходного файла

$ split -d -b 10m slow3306_9105.log slow.log
$ ls
slow3306_9105.log  slow.log00  slow.log01  slow.log02  slow.log03  slow.log04 

Обрезка номера строки файла

будетslow3306_9105.logФайл разбит на несколько файлов по количеству строк (5w строк в файле).

$ wc -l slow3306_9105.log
1502216 slow3306_9105.log   # 查看文件总行数
$ split -d -l 50000 slow3306_9105.log  slow.log
$ ls
slow3306_9105.log  slow.log00  slow.log01  slow.log02  slow.log03  slow.log04

выходной файл сохраняетlogРасширение файла

生成后的文件名有一点问题,我们本来需要的是*.log文件后缀,现在分割后的文件序号跑到了文件后缀的后面,需要处理一下:

$ split -d -b 10m slow3306_9105.log slow.log
$ ls
slow3306_9105.log  slow.log00  slow.log01  slow.log02  slow.log03  slow.log04


$ for i in `ls|grep slow`; do a=`echo $i|awk -F '.log' '{print $1$2".log"}'`; mv $i $a; done
$ ls
slow00.log  slow01.log  slow02.log  slow03.log  slow04.log  slow3306_9105.log  

Медицина сожалений: слияние журналов

Если вы обрезаете файл, и он слишком тонкий (не средний человек). Затем запишите多个文件合并的方法:cat 命令Повторно объедините разделенные файлы в один и тот же файл:$ cat slow0* > original.log

Суммировать

После разрезания на небольшие файлы очень удобно, загружается ли он на локальный для повторной обработки, локального просмотра или условного поиска.