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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur de Production
    Inscrit en
    Mai 2009
    Messages
    55
    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 : 55
    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 662
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 662
    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 102
    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 102
    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 662
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 662
    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 confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 352
    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 352
    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

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 662
    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 confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 352
    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 352
    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...

+ 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