Редактирование больших файлов

write-document Как отредактировать большой файл? Редактирование файлов большого размера в обычных редакторах вызывает проблему с нехваткой системных ресурсов. Файлы большого размера (50-500 МБ и выше) долго открываются текстовыми редакторами, и если повезёт открыть такой файл, то его редактирование практически невозможно из-за ужасных тормозов.

Например у нас есть дамп базы данных MySQL размером в 100 МБ, в котором мы хотим сменить все лишь несколько строк, но открыть его, не говоря уже про его редактирование, в обычных текстовых редакторах независимо от используемой операционной системы, почти нереально, - ну, на средненьком домашнем ПК, через пару часов может быть и откроется.

Проблема редактирования больших файлов давно меня колыхала, но до недавнего времени приходилось сталкиваться с файлами по 5-10, 20-50 МБ. А на днях человек попросил сделать массовую правку контента в дампе БД размером около 350 МБ, и здесь репа зачесалась.

Конечно можно было заниматься извратом с помощью утилит типа cat, dd, sed и т.п.. Из упомянутых подручных средств лучшим вариантом является потоковый редактор sed (https://ru.wikipedia.org/wiki/Sed), который доступен практически для любой платформы. Sed по кускам считывает содержимое файла, и согласно скриптовому выражению (--expression) изменяет данные в потоке и заново записывает файл, при этом файл читается полностью. Пример использования:

sed -e 's/oldstuff/newstuff/g' inputFileName > outputFileName

Это всё конечно хорошо, но, мы ведь хотим что-то более-менее визуальное - верно? В природе существует довольно мало текстовых редакторов, которые способны справится с редактированием файлов размер которых превышает 100 МБ или даже несколько ГБ.

Одним из текстовых редакторов способных справиться с открытием и редактированием файлов большого размера является редактор Vi (ака Vim), но Vim сам по себе, без дополнительно настройки на нужную волну, будет жутко тормозить как при открытии так и при редактировании.

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

Начнём с редактора Vim...

Правка больших файлов в редакторе Vim

Vim древнейший из текстовых консольных редакторов и, думаю, в особом представлении не нуждается. Редактор Vim присутствует в любой UNIX-like операционной системе, а также доступен для друг платформ, и поэтому мы начнём именно с него. Если его ещё нет в системе, то устанавливаем:

# install Vim and GVim
$ apt-get install vim vim-gtk

Следующим шагом будет установка плагина LargeFile (http://www.vim.org/scripts/script.php?script_id=1506), который выполняет все необходимые настройки при открытии файлов большого размера. Устанавливаем:

$ gunzip LargeFile.vba.gz
$ vim LargeFile.vba
" Vimball Archiver by Charles E. Campbell, Jr., Ph.D.
UseVimball
finish
+--198 строк: plugin/LargeFile.vim -----
+-- 94 строк: doc/LargeFile.txt -----
~
~
:so %
 
Vimball Archive
extracted <plugin/LargeFile.vim>: 196 lines
wrote /home/user/.vim/plugin/LargeFile.vim
extracted <doc/LargeFile.txt>: 92 lines
wrote /home/user/.vim/doc/LargeFile.txt
did helptags
Press ENTER or type command to continue

Для тех кто в танке, кратко поясним процесс:

  1. скачиваем LargeFile.vba.gz и распаковываем его;
  2. открываем консоль и переходим в директорию с распакованным плагином;
  3. открываем его редактором Vim (vim LargeFile.vba);
  4. жмём <Shift>+:, печатаем so % и жмём <Enter>;
  5. далее <Shift>+:, печатаем q и жмём <Enter>.

Плагин LargeFile редактора Vim по умолчанию большими считает файлы размером 20MB и выше, но это поведение можно изменить в файле ~/.vimrc добавив условие let g:LargeFile=10 - где, понятное дело, 10 это размер в МБ который нужно считать большим.

Это собственно и всё. Единственно, что ещё стоит иметь ввиду, так это то, что в режиме правки больших файлов плагин LargeFile отключает подсветку синтаксиса, буферизацию изменений (т.е. нельзя отменить правку), создание файлов xxx.swap, переходит в бинарный режим (:set binary).

Для работы с Vim нужны предварительные навыки, и даже при использовании графической оболочки GVim без них (предварительных навыков) не обойтись.

JOE Text Editor для правки огромных файлов

JOE ещё один консольный текстовый редактор, который по некоторым слухам может редактировать огромные файлы превышающие размер памяти компьютера, например для открытия файла размером в 1 ГБ JOE затрачивает всего 48-50 МБ памяти - так это или нет, автору поста пока не довелось испытать лично. Вот его краткое вступительное описание из man joe:

JOE - мощный текстовый редактор. Он обладает экранным пользовательским интерфейсом, подобно многим дружественным пользователю редакторам для PC. Пользователи WordStar от Micro-Pro или "Турбо"-языков от Borland почувствуют себя с ним как дома. В то же время JOE является полнофункциональным текстовым экранным редактором для UNIX, и обладает массой функций для редактирования программ и текстов.

JOE также эмулирует несколько других редакторов. JSTAR - это имитация WordStar со многими расширениями JOE. JPICO - имитация текстового редактора PICO, используемого в почтовой системе PINE, но со многими расширениями и улучшениями. JMACS - это имитация GNU-EMACS. JICE - настроенный на использование функциональной клавиатуры в традиционном PC-стиле редактор, рекомендуемый для использования в комплексе программ бухучета iceB. RJOE - урезанная версия JOE, которая позволяет редактировать только файлы, указанные в командной строке.

Хотя JOE выглядит ка шесть различных редакторов, он в действительности представляет собой единственную исполняемую программу, но с шестью разными именами. Имя редактора вместе с суффиксом "rc" составляют имя инициализационного файла JOE, который определяет внешние особенности редактора.

Справку по доступным командам можно получить нажатием на определённую комбинацию клавиш в зависимости от варианта запуска программы:

  • joe - ^+KH (<Ctrl>+KH)
  • jstar - ^+J (<Ctrl>+J)
  • jmacs - ^+XH (<Ctrl>+XH)
  • jroe - ^+KH (<Ctrl>+KH)
  • jpico - ^+G (<Ctrl>+G)

Команда jice не была обнаружена, - возможно, устаревший ман, забыли включить её в пакет, мне досталась демо-версия программы JOE :) Устанавливаем как обычно:

$ sudo apt-get install joe

glogg - advanced log explorer

Заявлен как "A fast, advanced log explorer.", и к теме редактирования больших файлов не имеет никакого отношения, но а вот для просмотра огромных файлов будет самое оно.

Из меню "Edit" доступны только команды "Копировать" и "Найти", поэтому данная программа будет идеальна в тех случаях когда нам нужно открыть большой файл для просмотра, поиска или копирования в нём.

$ apt-get install glogg

P.S. Статья в большей степени относится к операционным системам UNIX-like, но некоторые из программ могут быть найдены и для ОС семейства Windows.


Добавить комментарий


Защитный код
Обновить

no-script
[ Подробнее... ]
27 megabytes