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

时间:2015-03-21 22:15:37

标签: sql perl unix awk

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

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

/bin/awk 'BEGIN{RS=";"}{x="export."++i;}{print $0";"> 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点来创建标签。

2 个答案:

答案 0 :(得分:1)

这可能是打开太多文件的问题。尝试关闭上一个文件,然后再写入下一个文件。

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

答案 1 :(得分:1)

TIMTOWTDI。一个可能是:

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