将 mydumper sql 文件拆分为单独的 sql 文件

split mydumper sql file into separate sql files

我正在尝试将 mydumper 创建的文件拆分为每个 SQL 语句的单个文件。结束分隔符是 ;但它是多行的。

我以为我用这个命令行就可以了:

/bin/awk 'BEGIN{RS=";"}{x="export."++i;}{print [=12=]";"> x".sql";}' 

但是生成的文件没有正确终止。我的样本行数少得多,但效果很好。所以我的问题是,如何用完整的行拆分 SQL 文件?

在我的示例文件中,我重复了 sql 并且一切正常。

insert into table (field) values
    ('asdf'),
    ('asdf'),
    ('asdf'),
    ('asdf'),
    ('asdf'),
    ('asdf'),
    ('asdf'),
    ('asdf'),
    ('asdf'),
    ('asdf'),
    ('asdf'),
    ('asdf'),
    ('asdf'),
    ('end');

awk 是否有某种记录长度限制?

[root@db294 TEST]# wc -l *.sql
10364 export.66.sql
10304 export.67.sql
10209 export.68.sql
10208 export.69.sql
10582 export.6.sql
10207 export.70.sql
10207 export.71.sql
 9979 export.72.sql
 9918 export.73.sql
 9918 export.74.sql
 9926 export.75.sql
 9931 export.76.sql
10061 export.77.sql
10225 export.78.sql
10209 export.79.sql
10585 export.7.sql

也许是时候重新打开我的 Camel 书并尝试 Perl vs Awk

有人请为 mydumper 创建标签,因为我没有 1500 点来创建标签。

可能是打开文件太多的问题。在写入下一个文件之前尝试关闭上一个文件。

/bin/awk 'BEGIN{RS=";"}{close("export" i ".sql"); x="export."++i;} {print [=10=]";"> x".sql";}' 

TIMTOWTDI。一个可能是:

perl -0x3b -MPath::Tiny -nE 'path("export.@{[++$n]}.sql")->spew($_)'