Это 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
Суммировать
После разрезания на небольшие файлы очень удобно, загружается ли он на локальный для повторной обработки, локального просмотра или условного поиска.