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 :

Insérer des éléments dans une colonne spécifique d'un fichier csv.


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 15
    Par défaut Insérer des éléments dans une colonne spécifique d'un fichier csv.
    Bonjour la communauté.

    J'ai un petit soucis depuis hier que je n'arrive pas à résoudre.

    J'ai fichier csv "pg_database" qui a en son sein plusieurs colonnes dont respectivement hostname, datname, datdba,...
    J'ai créé une colonne is_database_system dans le fichier dans laquelle je devrais inscrire si oui ou non la database est une database système.
    Et aussi je voudrais pouvoir créer la colonne à la fin, si quelqu'un a la solution.

    Je vous mets le code pour que vous voyez plus clair.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    while read ligne; do     
    	dbname=$(echo "$ligne" | cut -d';' -f2); 
    	if [ $dbname = "datname" ]; then
    		sed -i "1s/^/is_database_system$delim/" $script_path_result/pg_database.csv
    	else
    		for i in "${list_of_database_system[@]}"; do
    			if [ "$i" = "$dbname" ]; then 
            			sed -i "2,$ s/^/True$delim/" $script_path_result/pg_database.csv
     
    				#break;
    			else
    				sed -i "2,$ s/^/False$delim/" $script_path_result/pg_database.csv
    	       		fi
    		done
    	fi	         
    done < $script_path_result/pg_database.csv
    }
    Je voudrais pouvoir insérer pour chaque ligne de la colonne is_database_system que j'ai créée l'information True ou False selon le cas.

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 15
    Par défaut
    La liste "list_of_database_system" contient quelque noms de database.

  3. #3
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 359
    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 359
    Par défaut
    Bonjour,

    Pourrais-tu penser à utiliser la balise code [#] pour tout ce qui code ou exemple ?
    Il serait bien d'avoir quelques input d'exemple ainsi que le avant et après.

    Car, la comme ça, un bout de code (non complet) et le peut d'explication du problème, c'est difficile d'aider.

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 15
    Par défaut
    Je vous remercie pour votre réaction.

    Je veux juste préciser que tout le code est là.

    Peux être devrais-je parler du contenu du fichier pg_database.

    Dans ce cas je dirai est structuré comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    hostname;datname;datdba;...
                                                                   debian;postgre;10;...
                                                                   debian;ecole;10;...
                                                                   debian;template0;...
                                                                   debian;template1;...
    Sachant que je voudrais sélectionner la colonne datname j'ai fait ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while read ligne; do
     
                              dbname=$(echo "$ligne" | cut -d';' -f2); 
     
    done < $script_path_result/pg_database.csv
    Maintenant, il est question de comparer le nom de la base dans le fichier pg_database à celui de la liste et de dire si ou ou non c'est une base sytème.

  5. #5
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 359
    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 359
    Par défaut
    Perso,
    Je trouve ça un peu lent...
    Ce que je ferais, se serai de généré, depuis ta liste de database system, un fichier sed qui se chargerait de faire:
    1)mettre false à la fin de la ligne en cours de traitement
    2)verifié si le deuxieme champs est une database system, alors remplacer le false par true
    Et refaire 2 pour tout les database system (on pourrait aussi dire a sed de passer à la ligne suivante dés qu'il a trouvé une database system ok).

    Donc plus vraiment de script shell, sauf pour fabriquer le script sed qui ressemblerait a ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    s/$/;false/
    /^[^;]*;datname;/s/false$/true/;t
    /^[^;]*;datsys1;/s/false$/true/;t
    /^[^;]*;datsys2;/s/false$/true/;t
    ...

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 15
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Perso,
    Je trouve ça un peu lent...
    Ce que je ferais, se serai de généré, depuis ta liste de database system, un fichier sed qui se chargerait de faire:
    1)mettre false à la fin de la ligne en cours de traitement
    2)verifié si le deuxieme champs est une database system, alors remplacer le false par true
    Et refaire 2 pour tout les database system (on pourrait aussi dire a sed de passer à la ligne suivante dés qu'il a trouvé une database system ok).

    Donc plus vraiment de script shell, sauf pour fabriquer le script sed qui ressemblerait a ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    s/$/;false/
    /^[^;]*;datname;/s/false$/true/;t
    /^[^;]*;datsys1;/s/false$/true/;t
    /^[^;]*;datsys2;/s/false$/true/;t
    ...

    Je dois avouer que je suis un peu perdu dans votre code du fait évidement que je suis GRAND DEBUTANT en bash.

    Néanmoins si j'ai bien compris votre raisonnement je devrais préciser que le fichier pg_database dont il est question, c'est lui qui doit impérativement contenir la colonne is_database_system.

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

Discussions similaires

  1. [WD20] Griser des éléments dans une colonne de table de type Combo
    Par matheous dans le forum WinDev
    Réponses: 3
    Dernier message: 08/09/2016, 09h33
  2. insérer des éléments dans une string
    Par salyiohh dans le forum Langage
    Réponses: 2
    Dernier message: 23/06/2015, 12h07
  3. Réponses: 5
    Dernier message: 14/06/2013, 15h09
  4. insérer et décaler des élèments dans une ArrayList
    Par biljava dans le forum Collection et Stream
    Réponses: 13
    Dernier message: 21/07/2011, 10h05
  5. insérer des élément dans une base de donné
    Par wiss20000 dans le forum JDBC
    Réponses: 5
    Dernier message: 01/03/2007, 14h49

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