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 :

Synchonisation (ou rapprochement) de deux fichiers avec la commande join sur deux colonnes (champs)


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Liamm
    Femme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 161
    Par défaut Synchonisation (ou rapprochement) de deux fichiers avec la commande join sur deux colonnes (champs)
    Bonjour,

    En utilisant la commande join, on précise généralement quel est le champ (ou colonne) qui sert au rapprochement.

    Je n'ai pas trouvé de réponse à cette question:

    Peut-on faire le rapprochement sur (la concaténation de) deux champs (ou colonnes) ?

    Exemple : pour un rapprochement sur les champs (ou colonnes) numéro 1 et 2

    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
    #!/bin/bash                   
     
    #####   Script : testjoin.sh   #####
    # Autheur :              TDL
    # Date de creation :     fevrier 2021
    # Date de modification : a plus
    #
    # S Y N C H R O   F I C H I E R   1
    # E T             F I C H I E R   2
    #
    # ENTREE : 1/ fichier csv passe en parametre $1 au script
    # ENTREE : 2/ fichier csv passe en parametre $2 au script
    #
    # SORTIE : Fichier en sotie affichage ecran du join ou f3test.csv
    #
    join -t ';' -j '1 2' $1 $2 -o '1.1 1.2 1.6 2.3 2.4' > f3test.csv
    La commande join avec -j '1 2' n'est pas acceptée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ ./testjoin.sh f1testjoin.csv f2testjoin.csv 
    join: numéro de champ incorrect*: «1 2»
    Y a t-il une solution simple pour faire cela ?

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 288
    Par défaut
    Bonjour

    Je reviendrais à la philosophie unix : chaque logiciel fait une chose et il le fait bien.
    En clair, on modifie le séparateur entre 1 et 2, on fait la jointure, puis on remet le séparateur précédent.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ cat afac_fic1.txt
    Cerisier acide;Prunus cerasus;ROSACEÆ; . . .
    Cerisier des oiseaux;Prunus avium;ROSACEÆ; . . .
    Cerisier acide;pitus;ROSACEÆ; . . .
    Cerisier des oiseaux;zouizoui;ROSACEÆ; . . .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ cat afac_fic2.txt
    Cerisier acide;Prunus cerasus;150; . . .
    Cerisier des oiseaux;Prunus avium;1460; . . .
    Cerisier acide;pitus;730; . . .
    Cerisier des oiseaux;zouzou;490; . . .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ join -t ';' -j1 <(sed 's/\;/\x13/' afac_fic1.txt) <(sed 's/\;/\x13/' afac_fic2.txt) | sed 's/\x13/\;/'
    Cerisier acide;Prunus cerasus;ROSACEÆ; . . .;150; . . .
    Cerisier des oiseaux;Prunus avium;ROSACEÆ; . . .;1460; . . .
    Cerisier acide;pitus;ROSACEÆ; . . .;730; . . .
    Les 2 champs 1 et 2 sont bien nécessaires à la jointure.

    Pour utiliser un seul outil, pense à awk.

  3. #3
    Membre confirmé Avatar de Liamm
    Femme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 161
    Par défaut
    Merci bien

    J'essayerai de retenir la leçon :

    la philosophie unix : chaque logiciel fait une chose et il le fait bien.

Discussions similaires

  1. Réponses: 3
    Dernier message: 03/06/2009, 16h14
  2. Réponses: 2
    Dernier message: 02/06/2009, 17h54
  3. Copier X fois un fichier avec la commande cp
    Par Info_76 dans le forum Linux
    Réponses: 1
    Dernier message: 07/07/2008, 17h56
  4. [XP]copier plusieurs fichiers avec la commande copy
    Par Smip99 dans le forum Scripts/Batch
    Réponses: 8
    Dernier message: 16/06/2008, 19h35
  5. ouvrir fichier avec la commande system()
    Par paissad dans le forum C
    Réponses: 5
    Dernier message: 19/05/2007, 21h28

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