2010-05-10 9 views
0

J'ai un très gros vidage SQL autour de 400MB. C'est dans le format suivant, "INSERT INTO user VALEURS ('USERID', 'USERNAME', 'PASSWORD', '0', '0', 'EMAIL', 'GENRE', 'ANNIVERSAIRE', '182' ',' 13 ',' 640 ',' Marié ',' Straight ',' ',' Oui ',' Oui ',' 1146411153 ',' 1216452123 ',' 1149440844 ',' 0 ', photo', '1 ',' 0 ',' 0 ',' zip ',' 0 ',' ',' 0 ',' ',' ',' 0 ') "Rechercher et remplacer

Y at-il de toute façon je peux juste obtenir l'email et mot de passe à partir de cela, je veux importer les utilisateurs dans une autre table. Est-ce que quelqu'un sait comment je peux faire ceci et juste obtenir le mot de passe d'email dépouillé de ce contenu?

Nous vous remercions à l'avance

+1

Pourquoi ne pas charger la sauvegarde SQL dans une base de données et puis lancez une requête contre elle, en sélectionnant seulement l'email et le mot de passe ??? – FMc

Répondre

2

depuis votre question est étiquetée "perl", une solution partielle:

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

Il peut y avoir des virgules dans les champs –

+0

Génial, fonctionne très bien! Merci beaucoup! –

+0

avec la redirection d'E/S (http: // en. wikipedia.org/wiki/Redirection_%28computing%29) .BTW Kinopiko a raison, c'est une raison pour laquelle j'ai écrit __partial__ dans ma réponse –

0

Un court Perl-oneliner solution

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

Comme Kinopiko dit, exécuter split pour analyser les fichiers CSV n'est pas une bonne idée (par exemple, les virgules dans les champs, etc ...). Vous devriez plutôt utiliser un analyseur CSV, comme ceci:

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" 
} 

NOTE: Non testé depuis que je suis maintenant dans un environnement n'a pas accès aux CSV_XS modernes :(

+0

+ 1 pour le module approprié pour analyser CSV, un problème, comme vous le mentionnez, est d'avoir je t dans l'environnement ... sinon, parfois la force brute fera l'affaire. –