2010-05-10 115 views
0

我有一個非常大的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

回答

2

,因爲你的問題被標記爲 「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

0

較短Perl的oneliner解決方案

perl -F, -anE 'say $F[5], $F[2];' file 
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 :(

+0

+1中編寫__partial__的一個原因,以便適當的模塊解析CSV,正如你所提到的,一個問題是要有一世在環境中......否則,有時候暴力行爲就會發生。 – 2010-05-11 08:33:03