Всем доброго времени суток и всяческих прочих разностей.
Это совсем небольшая статья (даже, скорее, заметка), достаточно специфичная для обычного (или опытного) пользователя, которая, тем не менее, будет полезная начинающим эникеям, админам разных мастей и прочих айтишников.
Как ни крути, то так или иначе, человеку, который сталкивается с разного рода серверами (или просто решениями определённого типа, - не важно, программного или аппаратного) часто приходится иметь дело с логами (т.е файлами журналов). Более того, не просто сталкиваться, а вообще, - это один из основных инструментов диагностики (и не только) самого разного типа, при этом их размер может достигать даже не десятков, а сотен Гигабайт.
И, если под линуксом еще можно крутить-вертеть логами достаточно бодро штатной консолью, то под Windows некоторые элементарные действия могут вызывать, мягко говоря, определённого рода неудобства. В связи с этим один из коллег и членов команды, написал небольшую утилитку, которая существенно упрощает жизнь при работе с этими самыми логами.
Ею тут мы и хотим поделиться.
Небольшой скрипт для работы большими файлами логов
Здесь и далее, текст представлен по принципу "как есть" (за исключением мелких комментариев и стилистических правок), т.е непосредственно от автора программы.
По долгу службы приходиться сталкиваться с большими лог файлами (по 50 Гб к примеру). В связи с этим накатал программку для разбивки этих файлов по строкам. Программа проста и не замысловата и имеет всего три функции:
- Собственно первая функция разделит файл на равное количество строк. В папке с программой создастся папка «new_folder» в ней будут создаваться файлы «1.txt», «2.txt» и тд, в каждый из которых будет писаться ровно столько строчек, сколько вы укажете;
- Вторая функция вырежет из файла указанный диапазон строк. И в папке «new_folder» создастся файл «new_file.txt» в него собственно и запишутся строки;
- Третья и четвертая отвечают за подсчет количества строк в логе или открытие нового файла, что, думаю, логично из скриншота ниже.
ВНИМАНИЕ! При повторном вызове функции она перепишет существующие файлы в папке «new_folder».
Чтобы указать файл, собственно, не обязательно заморачиваться и можно просто перетащить его мышкой в окно (drag and drop) программы. Что касается ручного указания пути (методом ввода), то не важно указан путь в кавычках или без (программа сама поправит). Сетевые же пути так же поддерживаются в полном объёме.
Примечание:
Юникодовские файлы разбиваются и обрабатываются криво, но логи, как правило, в юникоде не пишут, - поэтому фиксить не стал.
Что касается быстродействия.. Программка написана на python и работает в один поток, а следовательно сверх быстродействия ожидать от неё не приходиться. С другой стороны, вот небольшая статистика (тестировал на Сore2Duo файл размером в 8 Гб содержанием на 116.5 млн строк):
- Посчитал строки за 03:00;
- При разбивке файла по 50 000 000 строк ушло 13:30;
- Вырезал из середины файла 1 000 000 строк за 3:20;
Такие дела.
Скачать можно по этой ссылке (размер около 2 Мб). Исходник можно взять здесь.
Установка не требуется, распакуйте архив чем-нибудь вроде 7-zip и запустите text_cut_line.exe. Использованию, думаю, понятно из скриншота.
На сим к послесловию.
Послесловие
Что касается жалоб и предложений, то я их конечно учту, и, возможно, даже что-то переделаю, но обещаний давать не могу т.к. во времени довольно ограничен.
К слову, если Вы решили доделать\переделать программу, то просьба связаться с автором данного проекта (или просто написать в комментарии к этому материалу) и предоставить новую версию + её исходный код. Таким же образом можно высказать пожелания, сообщить об ошибках и прочее.
Как и всегда, если есть какие-то мысли, вопросы, дополнения и всё такое прочее, то добро пожаловать в комментарии к этому материалу.
P.S. За существование данной статьи (и самой программы) спасибо Proxy
Кстати говоря, не обязательно ковырять именно логи. Если Вам каким-то чудом достался другого типа огромный txt (да и просто текстовый, формат не суть) файл, то этой утилиткой его можно подробить и открывать с превеликим удовольствием.
Спасибо за Python! Как раз пытаюсь в нем разобраться)))
И на днях была задумка сделать обработку файлов в формате csv. Но пока не смог реализовать то, что хотел.)))
Пожалуйста :)
Хм... а ответы на комментарии почему-то не приходят на почту... Интересно!
Хм. По подписке то? Совсем не приходят? Может в спам падают?
Действительно странно.
Нет, в спам заглядывал. Ничего не приходит. Только анонсы новых статей. И в этот раз опять просто сам зашел посмотреть - нет ли нового ответа)))
Хм, посмотрим, странно.
Спасибо за информацию.
А еще можно попробовать sublime text 2/3 :)
Жует кстати сильно долго, мне вообще не понравилось. Тот же notepad++ у меня гиговый файл открывает на пару порядков быстрее.
А случайно нет статьи о том как разбираться в этих логах?
В каких именно?
В журналах о коих идет речь в сей статье, пару раз самостоятельно пытался разобраться но там черт ногу сломит, нужно почитать. А у вас очень доходчиво и просто получается рассказывать о сложных вещах. Вот подумал может уже была статья такая.
В этой статье речь идет о логах как таковых, не каких-то конкретно. Программа соответственно написана для обработки любых логов, текстовых файлов и тп. Если Вы про эти файлы журналов - https://sonikelf.ru/zhurnaly-windows-kak-element-diagnostiki-kompyutera/- то в общем-то ничего сложного в них нет, может сделаем вторую статью. Если Вы про какие-то еще логи (а их разновидностей, мягко говоря, сотни), то тут уж никакая статья не спасёт - везде своя специфика.
Именно про эти журналы что по ссылке :) Когда включался выключался ПК, какие программы когда запускались, и многое другое ведь там очень много чего полезного, но увы знаний не хватает.
Учтемс, спасибо за мнение ;)