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 :

Bash/Sed ou awk - Ajouter des données apres la nième virgule


Sujet :

Shell et commandes GNU

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur de Production
    Inscrit en
    mai 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de Production
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : mai 2009
    Messages : 30
    Points : 29
    Points
    29
    Par défaut Bash/Sed ou awk - Ajouter des données apres la nième virgule
    Bonjour

    je suis en train de preparer un script pour recuperer des données d'une base d'une appli, vers une base de la meme applis mais nouvelle version
    par contre pour certaines tables, j'ai parfois des champs en plus
    quand ils sont à la fin, pas de soucis, mais le problème se pose quand il sont intercalé dans la structure existante.

    pour le moment je fait des dump de mes tables pour avoir les données, et je peut faire une reinsertion
    par contre, pour d'autre, je voulais faire un traitement intermediaire pour modifier les lignes de requete dans mon fichier sql

    j'ai a chaque ligne une requete sql type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO <table> VALUES (data1,data2,....);
    Je voudrais pour certaines table, pouvoir inserer des colonnes apres la Niem colone
    par exemple, pour une table, j'ai une colone a inserer apres la 4em,le separateur etant la virgule dans ma requete.

    mais mes connaissances en sed sont trop limités pour ce type de remplacement.
    avec awk je pourrais recuperer les debut avec les $1,$2, etc, inserer mes colonnes, mais je sais pas comment mettre le reste de la ligne ensuite

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    février 2008
    Messages
    7 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2008
    Messages : 7 298
    Points : 18 840
    Points
    18 840
    Par défaut
    Bonjour,

    par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ awk -vchampAdditionnel=1 'BEGIN{FS=OFS=","}{for(i=1;i<=NF;i++)if(i==champAdditionnel)$i=$i","}1' <<<'INSERT INTO <table> VALUES (data1,data2,....);'
    INSERT INTO <table> VALUES (data1,,data2,....);
    le 1 à la fin du code awk est équivalent à {print $0}.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    avril 2008
    Messages
    2 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : avril 2008
    Messages : 2 056
    Points : 5 719
    Points
    5 719
    Par défaut
    Citation Envoyé par Chico008 Voir le message
    pour le moment je fait des dump de mes tables pour avoir les données, et je peut faire une reinsertion
    par contre, pour d'autre, je voulais faire un traitement intermediaire pour modifier les lignes de requete dans mon fichier sql
    À vérifier si le dump ne pourrait pas être paramétré (avec une requête sql ou une petite procédure PL/SQL) pour directement insérer les champs à ajouter...

    j'ai a chaque ligne une requete sql type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO <table> VALUES (data1,data2,....);
    Je voudrais pour certaines table, pouvoir inserer des colonnes apres la Niem colone
    par exemple, pour une table, j'ai une colone a inserer apres la 4em,le separateur etant la virgule dans ma requete.
    Attention ! Si tu as des champs de type chaine de caractères qui pourraient, comme par hasard, contenir des ",", le décompte de "," peut être faussé...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO <table> VALUES ("champ1 séparé par une virgule noire","champ2, avec virgule intégrée rouge","champ3",....);
    Je suppose qu'on doit pouvoir le vérifier en faisant quelque chose comme (pas testé), si le nombre de virgules attendu est 6:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ awk 'BEGIN{FS=OFS=","}{print NF","$0}' | grep -v '^6,'
    # ou bien
    $ awk 'BEGIN{FS=OFS=","}{if (NF<>6) {print NF","$0}'

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    février 2008
    Messages
    7 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2008
    Messages : 7 298
    Points : 18 840
    Points
    18 840
    Par défaut
    Citation Envoyé par jack-ft
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ awk 'BEGIN{FS=OFS=","}{print NF","$0}' | grep -v '^6,'
    awk sait faire ce que fait grep.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    décembre 2012
    Messages
    4 180
    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 180
    Points : 12 391
    Points
    12 391
    Par défaut
    Moi, j'aurai tendance à dire qu'en sql, on a une commande équivalente à insert qui permet de se passer de cette rustine, c'est update
    Cordialement.

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    février 2008
    Messages
    7 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2008
    Messages : 7 298
    Points : 18 840
    Points
    18 840
    Par défaut
    UPDATE permettrait d'ajouter une colonne où on veut dans une table ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    décembre 2012
    Messages
    4 180
    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 180
    Points : 12 391
    Points
    12 391
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    UPDATE permettrait d'ajouter une colonne où on veut dans une table ?
    Non, tu as raison, mais la forme de son insert non plus.

    Et comme il connait les colonnes (puisqu'il sait ou rajouter ces valeurs), autant passer par un insert qui nomme les colonnes...
    Cordialement.

  8. #8
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    février 2008
    Messages
    7 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2008
    Messages : 7 298
    Points : 18 840
    Points
    18 840
    Par défaut
    "ses" INSERT proviennent d'un dump (ce n'est pas Chico008 qui les a écrit) de tables d'une application dont la nouvelle version comporte un/des champs additionnels.
    j'imagine qu'il y a autant d'INSERT que d'enregistrement...
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur de Production
    Inscrit en
    mai 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de Production
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : mai 2009
    Messages : 30
    Points : 29
    Points
    29
    Par défaut
    c'est ca, une ligne d'insert par valeur, ca provient d'un dump

    sinon au final avec Sed j'ai trouvé hier soir.
    pour ajouter par exemple une colonne avec une valeur 0 apres la 4em
    on peut meme filtrer d'avantage, pour traiter que les lignes INSERT (car dans le dump y'a pas que ca, y'a d'autres infos en plus)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed "/^INSERT/s/,/,'0',/4"
    ca marche tres bien
    n'ayant pas de , dans mes données, ça marche sans se prendre plus la tête que ça

  10. #10
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    février 2008
    Messages
    7 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2008
    Messages : 7 298
    Points : 18 840
    Points
    18 840
    Par défaut
    si tu dois refaire ça, et/ou pour ta culture SQL
    jette un œil sur les possibilités de ALTER... est-ce que ça pourrait faire le job ? ce serait en effet mieux de trouver une solution en SQL plutôt que de faire "une rustine" en shell.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

Discussions similaires

  1. [XL-2010] Ajout des données dans une feuille Excel ligne après ligne à partir d'une ListView.
    Par TSAFACK-M dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 05/05/2017, 18h02
  2. [MySQL] l'ajout Des Données de 3 tables dans une seule table apres validation
    Par sooprano dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 19/11/2008, 16h54
  3. Ajouter des données après la dernière ligne non vide
    Par jnmab dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 14/11/2007, 10h21
  4. Réponses: 22
    Dernier message: 07/12/2005, 13h51
  5. ajouter des données dans une requête htttp en js
    Par jeromejanson dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 18/10/2005, 15h34

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