IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

sed sur un CSV


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 161
    Par défaut sed sur un CSV
    Bonsoir,

    J'ai un fichier très lourd de plus de 100 mo en CSV.

    En fessant un
    sur mon fichier voici ce que j'ai

    "0","-","-","-","-","-","-","-","-","-"

    Toutes les lignes son pareil avec des donnée différent bien entendu .

    Je voudrai les insérer dans une base de donnée donc voila mes commandes que j'ai faite et qui ne fonctionne pas toutes très bien.
    La première fonctionnel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sed 's/^"/INSERT INTO maTable VALUES ("/' monFichier.CSV > fichierVierge.SQL
    Celle qui ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sed 's/"$/");/' monFichier > fichierVierge
    Visiblement je n'arrive pas à trouver le dernier caractère de chaque ligne qui correspond à mon fichier CSV, puisque aucun remplacement ne s'effectue.

    Même si avant je fais un cat monFichier.CSV > fichier.sql cela ne change rien.


    Merci de votre aide.


    Edit : peut être que vous avez un moyen plus simple pour rentrer ce gros fichier dans une base de donnée.
    Mais j'ai pensé à celle là qui est assez rapide si elle marche.

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $ cat plop
    "0","-","-","-","-","-","-","-","-","-"
    "0","-","-","-","-","-","-","-","-","-"
    "0","-","-","-","-","-","-","-","-","-"
    
    $ sed -i.bak 's/.*/INSERT INTO maTable VALUES (&);/' plop
    
    $ cat plop
    INSERT INTO maTable VALUES ("0","-","-","-","-","-","-","-","-","-");
    INSERT INTO maTable VALUES ("0","-","-","-","-","-","-","-","-","-");
    INSERT INTO maTable VALUES ("0","-","-","-","-","-","-","-","-","-");
    $

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 161
    Par défaut
    Merci de ta réponse rapide mais je me retrouve pour les 10 premieres lignes avec :

    );SERT INTO maTable VALUES ("0","255","-","-","-","-","-","-","-","-"
    );SERT INTO maTable VALUES ("256","16777215","-","-","-","-","0.000000","0.000000","-","-"
    INSERT INTO maTable VALUES ("16777216","16777471","AU","AUSTRALIA","QUEENSLAND","MILTON","-35.316667","150.433333","-","+);:00"
    );SERT INTO maTable VALUES ("16777472","16843007","-","-","-","-","0.000000","0.000000","-","-"
    INSERT INTO maTable VALUES ("16843008","16843263","AU","AUSTRALIA","QUEENSLAND","MILTON","-35.316667","150.433333","-","+);:00"
    );SERT INTO maTable VALUES ("16843264","16909055","-","-","-","-","0.000000","0.000000","-","-"
    INSERT INTO maTable VALUES ("16909056","16909311","AU","AUSTRALIA","QUEENSLAND","MILTON","-35.316667","150.433333","-","+);:00"
    );SERT INTO maTable VALUES ("16909312","17039359","-","-","-","-","0.000000","0.000000","-","-"
    INSERT INTO maTable VALUES ("17039360","17039615","AU","AUSTRALIA","QUEENSLAND","MILTON","-35.316667","150.433333","-","+);:00"
    );SERT INTO maTable VALUES ("17039616","17367039","-","-","-","-","0.000000","0.000000","-","-"
    Si je te fais un sed 10q sur le fichier d'origine cela me donne :
    "0","255","-","-","-","-","-","-","-","-"
    "256","16777215","-","-","-","-","0.000000","0.000000","-","-"
    "16777216","16777471","AU","AUSTRALIA","QUEENSLAND","MILTON","-35.316667","150.433333","-","+10:00"
    "16777472","16843007","-","-","-","-","0.000000","0.000000","-","-"
    "16843008","16843263","AU","AUSTRALIA","QUEENSLAND","MILTON","-35.316667","150.433333","-","+10:00"
    "16843264","16909055","-","-","-","-","0.000000","0.000000","-","-"
    "16909056","16909311","AU","AUSTRALIA","QUEENSLAND","MILTON","-35.316667","150.433333","-","+10:00"
    "16909312","17039359","-","-","-","-","0.000000","0.000000","-","-"
    "17039360","17039615","AU","AUSTRALIA","QUEENSLAND","MILTON","-35.316667","150.433333","-","+10:00"
    "17039616","17367039","-","-","-","-","0.000000","0.000000","-","-"
    Merci de ton aide

  4. #4
    Membre expérimenté Avatar de FRUiT
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2011
    Messages : 83
    Par défaut
    Code awk : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    > awk '{ print "INSERT INTO matable VALUES ("$0");" }' plop
    INSERT INTO matable VALUES ("0","-","-","-","-","-","-","-","-","-");
    INSERT INTO matable VALUES ("0","-","-","-","-","-","-","-","-","-");
    INSERT INTO matable VALUES ("0","-","-","-","-","-","-","-","-","-");
    Ca marche aussi sur l'extrait réel de 10 lignes que tu as fourni.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 161
    Par défaut
    Merci FRUIT mais je ne connais vraiment rien avec la commande awk.

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Voila ce que j'obtiens sur ton exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ sed 's/.*/INSERT INTO maTable VALUES (&);/' plop
    INSERT INTO maTable VALUES ("0","255","-","-","-","-","-","-","-","-");
    INSERT INTO maTable VALUES ("256","16777215","-","-","-","-","0.000000","0.000000","-","-");
    INSERT INTO maTable VALUES ("16777216","16777471","AU","AUSTRALIA","QUEENSLAND","MILTON","-35.316667","150.433333","-","+10:00");
    INSERT INTO maTable VALUES ("16777472","16843007","-","-","-","-","0.000000","0.000000","-","-");
    INSERT INTO maTable VALUES ("16843008","16843263","AU","AUSTRALIA","QUEENSLAND","MILTON","-35.316667","150.433333","-","+10:00");
    INSERT INTO maTable VALUES ("16843264","16909055","-","-","-","-","0.000000","0.000000","-","-");
    INSERT INTO maTable VALUES ("16909056","16909311","AU","AUSTRALIA","QUEENSLAND","MILTON","-35.316667","150.433333","-","+10:00");
    INSERT INTO maTable VALUES ("16909312","17039359","-","-","-","-","0.000000","0.000000","-","-");
    INSERT INTO maTable VALUES ("17039360","17039615","AU","AUSTRALIA","QUEENSLAND","MILTON","-35.316667","150.433333","-","+10:00");
    INSERT INTO maTable VALUES ("17039616","17367039","-","-","-","-","0.000000","0.000000","-","-");
    Peux-tu afficher le résultat de la commande "cat -A ton_fichier_exemple" s'il te plaît, merci.

  7. #7
    Membre expérimenté Avatar de FRUiT
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2011
    Messages : 83
    Par défaut
    Citation Envoyé par xoum89 Voir le message
    Merci FRUIT mais je ne connais vraiment rien avec la commande awk.
    De toute façon avec les retours chariots microsoft ^M, elle ne marche pas mieux que le sed...

    Il faudrait préalablement traiter ton fichier avec par exemple ceci ou cela
    Oublie pas de faire des backups.

  8. #8
    Membre expérimenté Avatar de FRUiT
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2011
    Messages : 83
    Par défaut
    Pour chaque ligne du fichier plop,

    Code awk : Sélectionner tout - Visualiser dans une fenêtre à part
    '{ print "INSERT INTO matable VALUES ("
    écrire la string "INSERT INTO mytable VALUES("

    suivie de la ligne entière en question

    suivie de la string ");"

    Les accolades {} signifient de faire une action sur la ligne (ici ajouter du texte avant et après).

    Les apostrophes simples ' ' délimitent le script awk à exécuter sur le fichier plop.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 161
    Par défaut
    Merci beaucoup à vous deux.

    Bonne journée.

  10. #10
    Membre très actif

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Par défaut
    Question con : tu n'as pas un utilitaire avec ta bdd qui permettrait de faire ça proprement ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ouverture CSV (DoubleClick sur un .csv)
    Par BenoitM dans le forum Excel
    Réponses: 1
    Dernier message: 07/12/2007, 12h53
  2. tr et sed sur une chaine de caractére
    Par elflamby dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 13/09/2007, 16h20
  3. Ecriture sur fichier csv
    Par PIMPMAX dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 09/01/2007, 11h55
  4. Sed sur plusieurs fichiers
    Par gangsoleil dans le forum Linux
    Réponses: 4
    Dernier message: 21/02/2006, 11h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo