Редактировать очень большой sql dump/text file (on linux)
Мне нужно импортировать большой дамп mysql (до 10G). Однако дамп sql уже предопределен структурой базы данных с определением индекса. Я хочу ускорить вставку db, удалив определение индекса и таблицы.
Это означает, что я должен удалить/изменить первые несколько строк текстового файла 10G. Каков наиболее эффективный способ сделать это на linux?
Программы, требующие загрузки всего файла в ОЗУ, будут для меня излишними.
Ответы
Ответ 1
Вместо того, чтобы удалять первые несколько строк, попробуйте сделать их пустыми.
Программа hexedit
может это сделать - она читает файлы в кусках, поэтому открытие 10-Гбайт файла ничем не отличается от открытия на нем 100 КБ файла.
$ hexedit largefile.sql.dump
tab (switch to ASCII side)
space (repeat as needed until your header is gone)
F2 (save)/Ctrl-X (save and exit)/Ctrl-C (exit without saving)
Ответ 2
joe - это редактор, который хорошо работает с большими файлами. Я просто использовал его для редактирования файла дампа ~ 5G SQL. Потребовалось около минуты, чтобы открыть файл и несколько минут, чтобы сохранить его, с очень небольшим использованием swap (в системе с 4G RAM).
Ответ 3
sed 's/OLD_TEXT/NEW_TEXT/g' < oldfile > newfile
или
cat file | sed 's/OLD_TEXT/NEW_TEXT/g' > newfile
Ответ 4
Perl может читать файл по строкам:
perl -pi.bak -e '//create index/- создать индекс/'