搜索并替换

问题描述:

我有一个非常大的SQL转储大约400MB。搜索并替换

它的格式如下:“INSERT INTO user VALUES('USERID','USERNAME','PASSWORD','0','0','EMAIL','GENDER','BIRTHDAY','182 '','13','640','已婚','直','','是','是','1146411153','1216452123','1149440844','0',图片','1 ','0','0','zip','0','','0','','','0')“

是否有反正我可以只是得到电子邮件和密码输出,我想导入到另一个表的用户。

任何人都知道我可以做到这一点,只是从该内容中删除电子邮件密码?

预先感谢您

+1

进不去为什么SQL转储没有加载到数据库然后针对它发出查询,只选择电子邮件和密码??? – FMc 2010-05-10 13:15:41

,因为你的问题被标记为 “perl” 的,一个部分解决方案:

perl -ne '@m = split /,/; print $m[5], $m[2], "\n";' <your400MB.sqldump 
+0

虽然有可能是逗号在字段虽然 – 2010-05-10 13:04:09

+0

真棒,伟大的工程!非常感谢! – 2010-05-10 13:05:55

+0

与I/O重定向(http:// en。 BTW Kinopiko是正确的,这是我在我的回答 – 2010-05-10 13:09:49

较短Perl的oneliner解决方案

perl -F, -anE 'say $F[5], $F[2];' file 

由于Kinopiko说,运行拆分来解析CSV文件不是一个好主意(例如域内的逗号等)。你应该使用一个CSV解析器,这样的:

use strict; 
use Text::CSV_XS; 
my $csv_obj = Text::CSV_XS->new({allow_whitespace=>1, quote_char => "'"}) 
      || die "Error\n"; 
while (<>) { 
    $csv_obj->parse($_); 
    my @fields = $csv_obj->fields(); 
    print "$fields[2],$fields[5]\n" 
} 

注:没有测试,因为我在一个环境现在是具有现代CSV_XS :(

+0

+1中编写__partial__的一个原因,以便适当的模块解析CSV,正如你所提到的,一个问题是要有一世在环境中......否则,有时候暴力行为就会发生。 – 2010-05-11 08:33:03