搜索和替换

时间:2010-05-10 12:47:18

标签: perl unix terminal

我有一个非常大的SQL转储大约400MB。

它采用以下格式,“INSERT INTO用户值('USERID','USERNAME','PASSWORD','0','0','EMAIL','GENDER','BIRTHDAY','182' ,'13','640','已婚','直','','是','是','1146411153','1216452123','1149440844','0',图片','1' ,'0','0','zip','0','','0','','','0')“

无论如何我可以从中获取电子邮件和密码,我想将用户导入另一个表。

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

提前谢谢

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

正如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 :(

答案 2 :(得分:0)

较短的Perl-one衬垫溶液

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