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 :

Un "Join" qui ne fonctionne pas


Sujet :

Shell et commandes GNU

  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 57
    Par défaut Un "Join" qui ne fonctionne pas
    Bonjour,
    Je vous sollicite pour un nouveau soucis, encore...

    Je cherche à faire un "join" entre 2 fichier sur une colonne commune, mes fichiers sont triés, mais cela ne me ressort pas tout les résultats où il y a colonne commune....

    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
     
    > cat fichier1
     
    100001 3
    100009 251
    100023 21
    10002 33
    100028 3
     
    > cat fichier2
    100009 3
    10002 1
    10011 1
    100166 1
     
    > join fichier1 fichier2
    100009 251 3
    Il manque donc la ligne avec 10002

    Est-ce que cela vient du fait que la colonne sur lequel est fait le join ne contient pas le même nombre de ligne et donc les lignes communes ne se retrouvent pas en face?

    Dans mon esprit "join" était censé être capable de faire ce job sans aucun soucis, mais apparemment non

    La solution ultime pour ce genre de "join" se trouverait-elle plutôt dans un bout de "awk"? (beaucoup moins sympa)

  2. #2
    Rédacteur/Modérateur
    Avatar de Winnt
    Homme Profil pro
    budget et contrôle de gestion
    Inscrit en
    Décembre 2006
    Messages
    1 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : budget et contrôle de gestion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 978
    Par défaut
    Salut,

    Essaye ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    join -j1 fichier1 fichier2
    Winnt
    Merci de lire les règles du forum LaTeX et Qu'est ce qu'un ECM ?.
    N'hésitez pas à parcourir la FAQ la réponse y est peut-être déjà.
    Pensez au bouton si votre problème est résolu.


    C'est en Linuxant qu'on devient .... geek
    Et c'est en LateXant qu'on devient flemmard
    Mon blog tout neuf.
    Articles : présentation de la distribution Gentoo, Les index sous LaTeX et leur personnalisation.

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 57
    Par défaut
    Citation Envoyé par Winnt Voir le message
    Salut,

    Essaye ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    join -j1 fichier1 fichier2
    Déjà testé ^^, resultat identique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    > join -j1 fichier1 fichier2
    100009 251 3

  4. #4
    Rédacteur/Modérateur
    Avatar de Winnt
    Homme Profil pro
    budget et contrôle de gestion
    Inscrit en
    Décembre 2006
    Messages
    1 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : budget et contrôle de gestion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 978
    Par défaut
    Flute moi qui me disait avoir trouver la solution

    commence par ceci sur tes fichiers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sort -n fichier1 > fic1
    sort -n fichier2 > fic2
    join fic1 fic2
    Winnt
    Merci de lire les règles du forum LaTeX et Qu'est ce qu'un ECM ?.
    N'hésitez pas à parcourir la FAQ la réponse y est peut-être déjà.
    Pensez au bouton si votre problème est résolu.


    C'est en Linuxant qu'on devient .... geek
    Et c'est en LateXant qu'on devient flemmard
    Mon blog tout neuf.
    Articles : présentation de la distribution Gentoo, Les index sous LaTeX et leur personnalisation.

  5. #5
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 57
    Par défaut
    Citation Envoyé par Winnt Voir le message
    Flute moi qui me disait avoir trouver la solution

    commence par ceci sur tes fichiers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sort -n fichier1 > fic1
    sort -n fichier2 > fic2
    join fic1 fic2
    J'ai déjà testé ça aussi ^^
    Et la seule différence c'est que c'est la ligne avec 10002 qui sort et plus celle avec 100009

    Je vois vraiment pas le pourquoi du comment

  6. #6
    Membre émérite Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Par défaut
    Si un join ne fonctionne pas, il faut regarder le sort qui a précédé. Ici, l'un des fichiers n'est pas correctement trié. Oui, mais lequel et pourquoi? Comme c'est une erreur courante, je ne donne pas la réponse tout de suite .

  7. #7
    Rédacteur/Modérateur
    Avatar de Winnt
    Homme Profil pro
    budget et contrôle de gestion
    Inscrit en
    Décembre 2006
    Messages
    1 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : budget et contrôle de gestion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 978
    Par défaut
    Salut,

    Peut-être ceci à essayer (dsl pas de linux au boulot) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    sort -n -t ' ' -k 1,1 fichier1 > fic1
    sort -n -t ' ' -k 1,1 fichier2 > fic2
    join fic1 fic2
    Winnt
    Merci de lire les règles du forum LaTeX et Qu'est ce qu'un ECM ?.
    N'hésitez pas à parcourir la FAQ la réponse y est peut-être déjà.
    Pensez au bouton si votre problème est résolu.


    C'est en Linuxant qu'on devient .... geek
    Et c'est en LateXant qu'on devient flemmard
    Mon blog tout neuf.
    Articles : présentation de la distribution Gentoo, Les index sous LaTeX et leur personnalisation.

  8. #8
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 57
    Par défaut
    Citation Envoyé par jmelyn Voir le message
    Si un join ne fonctionne pas, il faut regarder le sort qui a précédé. Ici, l'un des fichiers n'est pas correctement trié. Oui, mais lequel et pourquoi? Comme c'est une erreur courante, je ne donne pas la réponse tout de suite .
    Mouarf

  9. #9
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 57
    Par défaut
    Citation Envoyé par Winnt Voir le message
    Salut,

    Peut-être ceci à essayer (dsl pas de linux au boulot) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    sort -n -t ' ' -k 1,1 fichier1 > fic1
    sort -n -t ' ' -k 1,1 fichier2 > fic2
    join fic1 fic2
    Idem.....

  10. #10
    Membre émérite Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Par défaut
    Bon, bon... j'y vais:
    La commande sort fait le tri sur TOUTE LA LIGNE par défaut, pas sur un champ. Or, join fait une jointure sur un champ précis, le premier par défaut, celui qui doit être trié. Donc sans donner d'option supplémentaire à sort, les valeurs du second champ (1, 3, 21, 33...) sont prises en compte dans le tri.

    Pour dire sur quel champ on veut trier, il faut ajouter à sort l'option -k 1,1 qui veut dire "s'il te plaît, trie le fichier du champ 1 au champ 1". Il faut aussi souvent donner le séparateur de champ avec -t ':' (si c'est ':'), mais le caractère par défaut est l'espace: ici c'est bon.

    En triant correctement, fichier1 ira beaucoup mieux...

  11. #11
    Rédacteur/Modérateur
    Avatar de Winnt
    Homme Profil pro
    budget et contrôle de gestion
    Inscrit en
    Décembre 2006
    Messages
    1 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : budget et contrôle de gestion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 978
    Par défaut
    Salut,

    @jmelyn : j'avions bon (après 2 essais mais chut )

    @ssc37 : Tu veux juste les lignes communes ou une fusion des 2 fichiers ?
    Winnt
    Merci de lire les règles du forum LaTeX et Qu'est ce qu'un ECM ?.
    N'hésitez pas à parcourir la FAQ la réponse y est peut-être déjà.
    Pensez au bouton si votre problème est résolu.


    C'est en Linuxant qu'on devient .... geek
    Et c'est en LateXant qu'on devient flemmard
    Mon blog tout neuf.
    Articles : présentation de la distribution Gentoo, Les index sous LaTeX et leur personnalisation.

  12. #12
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 57
    Par défaut
    Mouarf je suis vert, que les 2 fichiers soient triés je le savais, par contre le truc sur lequel je me plantai totalement c'est que pour moi j'avais pas besoin de préciser la colonne où ca s'arrêter avec "-k". Dans ma tête quand je faisais -k1 cela faisait bien le tri sur la première colonne, mais apparemment non

    Merci pour tout

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

Discussions similaires

  1. full join qui ne fonctionne pas
    Par Can10ce dans le forum SAS Base
    Réponses: 9
    Dernier message: 01/03/2012, 15h17
  2. Fonction Quoted printable qui ne fonctionne pas.
    Par leCcsympas dans le forum C
    Réponses: 3
    Dernier message: 13/01/2007, 18h54
  3. Join qui ne fonctionne pas
    Par voodooyas dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 15/03/2005, 13h30

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