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 :

Script pour utiliser les différentes valeurs d'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é
    Homme Profil pro
    Inscrit en
    Mars 2003
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 177
    Par défaut Script pour utiliser les différentes valeurs d'un CSV
    Bonjour à tous,

    Après parcours des différents sujets et de mon ami google, je me permet de venir vous demander votre aide.

    En entrée : Un fichier CSV.
    Je passe un awk sur ce fichier pour qu'il soit dans l'état que je souhaite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    awk '{  FS=";"}
                    $1 == "CC" {print $0}
                    $1 == "MT" {print $0}
                    END {}
            ' Flux_entrant.csv > test.csv
    J'ai donc un fichier de sortie qui comporte uniquement les lignes que je veux traiter ensuite.
    C'est là qu'intervient mon problème.
    Je voudrais parcourir le fichier CSV et pour chaque valeur de chaque ligne avoir une requete SQL différente.
    Je m'explique $1 de ligne1 et $1 de ligne 2 corresponde à une requete. $2 de ligne 1 et $2 de ligne 2 a une autre requete. etc... J'ai environ 90 valeurs soit 90 requetes.

    Je n'arrive pas a mettre en place quelque chose me permettant de faire cela d'une façon "simple".
    Auriez vous une idée ?

  2. #2
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 347
    Par défaut
    Bonjour,

    Aux informations que tu fournis, aux lieu des 'print $0', il suffit que tu print tes 90 requetes sql, avec le champs désirés dedans.
    Ou on pourrait peut-être faire plus simple si on avait plus d'information, comme par exemple, est-ce que tes 90 requêtes différentes sont les mêmes mais juste avec le champs qui change ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2003
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 177
    Par défaut
    Merci Disedorgue.
    Je vais déjà tenter ta première solution.

    Pour les requêtes, en fonction du $x qu'on a c'est le select qui est différent.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Si $1 alors :
    SELECT Regle1 FROM table1 WHERE champ1=$1 AND champ2=champ2
    Si $2 alors :
    SELECT Regle1 FROM table1 WHERE champ1=$2 AND champ2=champ3
    Dans le select je prend toujours le même champ, la/les tables sont toujours les mêmes. Dans la clause WHERE, la première restriction est sur la valeur du paramètre trouvé ($1, $2...) et la seconde restriction est dépendante du premier critère (Si j'ai un code article 12345, mes restrictions seront $1 = 12345 et champ2 = code article)

  4. #4
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 287
    Par défaut
    Bonsoir,

    Perso, je ferais un truc comme:
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    awk 'NR==1{for (i=1;i<=NF;i++) extraitLigne1[i]=$i;} NR==2{for (i=1;i<=NF;i++) extraitLigne2[i]=$i;} END{for (i in extraitLigne1) print "select "extraitLigne1[i]" where "extraitLigne2[i];}'  monFichierDeBase.txt

    Exemple:
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ cat monFichierDeBase.txt 
    cowboy pinule trompette sweetshirt amphore
    1 3 5 7 9
    $ awk 'NR==1{for (i=1;i<=NF;i++) extraitLigne1[i]=$i;} NR==2{for (i=1;i<=NF;i++) extraitLigne2[i]=$i;} END{for (i in extraitLigne1) print "select "extraitLigne1[i]" where "extraitLigne2[i];}'  monFichierDeBase.txt
    select cowboy where 1
    select pinule where 3
    select trompette where 5
    select sweetshirt where 7
    select amphore where 9

    Bon, là, évidemment, j'écris n'importe quoi.
    Mais tu as compris l'idée.
    Tu peux remplacer le deuxième élément variable par transformation(extraitLigne1[i],extraitLigne2[i]) en définissant la fonction de transformation, selon ton besoin.

Discussions similaires

  1. Réponses: 1
    Dernier message: 30/06/2006, 15h49
  2. Script pour imprimer les accents ?
    Par sperron dans le forum ASP
    Réponses: 12
    Dernier message: 12/06/2006, 20h55
  3. Script pour enlever les balises html
    Par Scratch48 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 02/11/2005, 17h16
  4. [MySQL] Script pour modifier les caracteres speciaux dans la bdd
    Par isa150183 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 15/09/2005, 13h07
  5. [Debutant] probleme pour utiliser les classes d'un .jar
    Par pissek dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 12/05/2004, 18h21

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