16

我必须导入一个大型 mysql 转储(最多 10G)。然而,已经使用带有索引定义的数据库结构预定义了 sql 转储。我想通过删除索引和表定义来加速数据库插入。

这意味着我必须删除/编辑10G文本文件的前几行。在 linux上执行此操作的最有效方法是什么?

需要将整个文件加载到 RAM 中的程序对我来说太过分了。

4

4 回答 4

35

与其删除前几行,不如尝试将它们编辑为空白。

hexedit程序可以做到这一点——它以块的形式读取文件,因此打开一个 10GB 的文件与打开一个 100KB 的文件没有什么不同。

$ 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)
于 2009-03-31T02:24:07.280 回答
5

joe是一个可以很好地处理大文件的编辑器。我只是用它来编辑一个~5G SQL 转储文件。打开文件大约需要一分钟,保存文件需要几分钟,很少使用交换(在具有 4G RAM 的系统上)。

于 2013-12-02T22:32:04.987 回答
2
sed 's/OLD_TEXT/NEW_TEXT/g' < oldfile > newfile

或者

cat file | sed 's/OLD_TEXT/NEW_TEXT/g' > newfile
于 2014-05-18T10:45:01.983 回答
-1

Perl 可以逐行读取文件:

perl -pi.bak -e 's/^create index/--create index/'

于 2009-03-31T02:25:57.260 回答