Life with teacher Lemon.

Linux 文件分割技巧

2020.12.10 | 共 375 字,阅读需约 1 分钟.

昨天生成了 500W 数据库插入语句,发现我司数据库导入数据有限制,每次只能提交 1M 的数据,因此在生成数据的脚本中,每 5000 行,重新设置 INSERT INTO TABLE 语句,准备按照 INSERT 标记进行文件切割。过程中用到了 Linux 命令 splitcsplit

Linux split 命令

split 命令有两种文件分割方式,按行分割 和 按尺寸分割。

  • 按行分割, 设置文件前缀 prefix 和后缀 suffix
split -l 5000 data.txt new_data_file_prefix --additinal-suffix=.sql
  • 按尺寸分割, 设置文件前缀 prefix 和后缀 suffix
split -b 1M data.txt new_data_file_prefix --additinal-suffix=.sql

按照这两种方式,虽然可以分割,但是对于 SQL 这种语句分割可能不好计算行数,亦或者按照尺寸分割,需要对新文件的首行重新添加 INSERT INTO 行,显然这不是我要的效果,搜索发现高级版分割命令 csplit

Linux csplit 命令

csplit 命令是 split 命令的变体,支持按照文件本身的特点来分割,最常用的莫过于按照指定的字符来分割,比如我的脚本每 5000 行就重新插入了 INSERT INTO 标记,那么此时使用该标记来分割文件再好不过了。执行之后就会看到新生成的 new_data_file_prefix000*.sql 文件了。

csplit -f new_data_file_prefix -b %04d.sql data.txt /INSERT/ {*}
发表评论
今日诗词