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

Linux Discussion :

Corrélation entre 2 fichiers


Sujet :

Linux

  1. #1
    Membre habitué
    Inscrit en
    Février 2006
    Messages
    268
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 268
    Points : 175
    Points
    175
    Par défaut Corrélation entre 2 fichiers
    Bonjour,

    je souhaite faire en shell une corrélation entre 2 fichiers et mettre le resultat dans un fichier.

    Dans un premier fichier j'ai
    1: integer = up
    2: integer = up
    3: integer = up
    4: integer = down
    5: integer = up

    et l'autre j'ai
    2: interface : ethernet 10/100
    3: interface : Giga 1000
    5: interface : ethernet 10/100

    et mon résultat serait :
    2: integer = up : ethernet 10/100
    3: integer = up : Giga 1000
    5: integer = up : ethernet 10/100

    Savez vous quels commande je dois utiliser??

    Merci de votre aide.

  2. #2
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    Bonjour.

    L'association de l'utilisation de paste et de sed devrait pouvoir faire l'affaire, je pense.

  3. #3
    Membre habitué
    Inscrit en
    Février 2006
    Messages
    268
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 268
    Points : 175
    Points
    175
    Par défaut
    merci,

    mais j'arrive pas à trouver comment faire, en utilisant le paste j'ai put coller le deuxieme fichier a la suite des lignes du premier mais le pb c'est qu'il ecrit

    1: integer = up 2: interface : ethernet 10/100
    2: integer = up 3: interface : Giga 1000
    3: integer = up 5: interface : ethernet 10/100
    4: integer = down
    5: integer = up
    une petite aide supplèmentaire??

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Ceci peut-être:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    while read ligne
    do
        numligne=$(echo $ligne | cut -d: -f1)
        valeur=$(echo $ligne | cut -d: -f3)
        echo "$(grep '^'$numligne':' fichier1) $valeur"
    done <  fichier2

  5. #5
    Membre habitué
    Inscrit en
    Février 2006
    Messages
    268
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 268
    Points : 175
    Points
    175
    Par défaut
    salut, merci de ton aide mais j'aurais juste une question.

    pourrais tu m'expliquer la ligne suivante:

    echo "$(grep '^'$numligne":" fichier1) $valeur"
    dsl je debute réellement en script

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "$(grep '^'$numligne":" fichier1) $valeur"
    Renvoie vers la sortie standard le résultat de la commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep '^motif à trouver' fichier1
    Dans ton cas le motif à trouver est, par exemple, 2:

    Le ^ est un ancrage de début de ligne. Ceci pour éviter que grep ne trouve des 2: ailleurs que dans le début de ligne.

    Pour éviter que grep ne renvoie plusieurs lignes de résultat, il sera peut-être utile de lui rajouter l'option -m 1 pour qu'il ne prenne que la première occurrence du motif.

  7. #7
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    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
    18
    19
    20
    21
     
    man join
     
    $ head f1 f2
    ==> f1 <==
    1: integer = up
    2: integer = up
    3: integer = up
    4: integer = down
    5: integer = up
     
     
    ==> f2 <==
    2: interface : ethernet 10/100
    3: interface : Giga 1000
    5: interface : ethernet 10/100
     
    $ join -t : f1 f2
    2: integer = up: interface : ethernet 10/100
    3: integer = up: interface : Giga 1000
    5: integer = up: interface : ethernet 10/100

  8. #8
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ join -t :  -o 1.1,1.2,2.3 f1 f2
    2: integer = up: ethernet 10/100
    3: integer = up: Giga 1000
    5: integer = up: ethernet 10/100

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    C'est fou ce qu'on trouve comme outils sous Linux hein?

    Dès qu'une solution dépasse une ligne en bash, c'est sans doute qu'on est passé à côté de quelque chose de plus simple!

    Bravo!

  10. #10
    Membre habitué
    Inscrit en
    Février 2006
    Messages
    268
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 268
    Points : 175
    Points
    175
    Par défaut
    Je vous remerci de votre aide,

    j'avais deja essayer avec join mais j'ai un problème il me met pas tout.

    j'ai seulement 12lignes qui s'affiches alors que je devrais en avoir 308

    Savez vous pk??


    Merci de votre aide

  11. #11
    Membre habitué
    Inscrit en
    Février 2006
    Messages
    268
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 268
    Points : 175
    Points
    175
    Par défaut
    Je vous remerci de votre aide precieuse , j'ai enfin compris pourquoi je n'avais pas tout.

    Il suffisait que je fasse un sort de mes fichiers puis faire le JOIN.


    Merci beaucoup.

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

Discussions similaires

  1. [EXCEL] difference entre deux fichiers
    Par Mokhtar BEN MESSAOUD dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/01/2006, 11h12
  2. Réponses: 1
    Dernier message: 02/12/2005, 14h07
  3. [langage] Passage d objet entre deux fichiers
    Par Slippers dans le forum Langage
    Réponses: 2
    Dernier message: 28/04/2005, 14h45
  4. automatisation entre un fichier .txt et sql server
    Par bibi2607 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 26/01/2005, 10h18
  5. Partage d'une constante entre 2 fichiers en C
    Par elsargento dans le forum C
    Réponses: 6
    Dernier message: 29/09/2003, 22h17

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