删除SQL文件中的列

删除SQL文件中的列,sql,ruby,regex,text-processing,Sql,Ruby,Regex,Text Processing,我有一个很大的SQL文件(~200MB),其中包含大量的INSERT指令: insert into `films_genres` (`id`,`film_id`,`genre_id`,`num`) values (1,1,1,1), (2,1,17,2), (3,2,1,1), ... 如何删除或忽略脚本中的列id,num。最简单的方法可能是将所需的列完全插入到临时保留表中,然后从保留表中将所需的列插入到实表中 insert into `

我有一个很大的SQL文件(~200MB),其中包含大量的
INSERT
指令:

insert  into `films_genres`
    (`id`,`film_id`,`genre_id`,`num`) 
    values 
    (1,1,1,1),
    (2,1,17,2),
    (3,2,1,1),
    ...

如何删除或忽略脚本中的列
id
num

最简单的方法可能是将所需的列完全插入到临时保留表中,然后从保留表中将所需的列插入到实表中

insert  into `films_genres_temp`
    (`id`,`film_id`,`genre_id`,`num`) 
    values 
    (1,1,1,1),
    (2,1,17,2),
    (3,2,1,1),
    ...

insert into `films_genres`
    (`film_id`,`genre_id`)
    select `film_id`,`genre_id`
        from `films_genres_temp`

这个Perl one liner应该可以做到这一点:

perl -p -i.bak -e 's/\([^,]+,/\(/g; s/,[^,]+\)/\)/g' sqlfile
它在位编辑文件,但创建扩展名为.bak的备份副本

或者,如果您更喜欢Ruby:

ruby -p -i.bak -e 'gsub(/\([^,]+,/, "("); gsub/, ")");' sqlfile
创建表#mytentable(id int、film#id smallint、genre#u id int、num int)

插入到#我的诱惑(
id
film\u id
genre\u id
num

[这里有数据]

插入电影类型(
film\u id
genre\u id
)从#我的诱惑选择
film\u id
genre\u id


删除表#mytentable

+1以获得最快和最简单的方法(look ma,无数据库)。除了OP似乎更喜欢使用Ruby;添加了一个ruby单行程序版本。