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 :

Traitement des colonnes de deux fichiers


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 37
    Par défaut Traitement des colonnes de deux fichiers
    Bonjour tout le monde

    J'ai une question !!

    j'ai deux fichiers
    fichier1:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    rep rep distRepRep
    R1   R2  d1
    R1   R3  d2
    R1   R4  d3
    R1   R5  d4
    R2   R3  d5
    R2   R4  d6
    R2   R5  d7
    R3   R4  d8
    R3   R5  d9
    R4   R5  d10
    fichier2:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    rep rayon
    R1  r1
    R2  r2
    R3  r3
    R4  r4
    R5  r5
    je veux afficher le traitement çi dessous:

    si r1+r2<d1 afficher: R1 et R2 ne se chevauchent pas
    si r2+r3<d5 afficher: R2 et R3 ne se chevauchent pas
    ect
    si non elles se chevauchent

    Est ce que c'est possible de faire ce traitement en bash directement? si oui, comment procéder?
    ou il faut passé par un petit script en python ou perl

    Merci par avance

  2. #2
    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
    Bonjour.
    J'ai un peu de mal à comprendre les spécifications!

    Citation Envoyé par BIG123 Voir le message
    J'ai une question !!
    Tu fais bien de le préciser!

    j'ai deux fichiers
    fichier1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    rep rep distRepRep
    R1   R2  d1
    R1   R3  d2
    R1   R4  d3
    R1   R5  d4
    R2   R3  d5
    R2   R4  d6
    R2   R5  d7
    R3   R4  d8
    R3   R5  d9
    R4   R5  d10
    fichier2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    rep rayon
    R1  r1
    R2  r2
    R3  r3
    R4  r4
    R5  r5
    je veux afficher le traitement çi dessous:

    si r1+r2<d1 afficher: R1 et R2 ne se chevauchent pas
    si r2+r3<d2 afficher: R2 et R3 ne se chevauchent pas
    Quelle est la corrélation entre r1 r2 d1 et les fichiers?
    La relation r1+r2<d1 émane-t-elle de la première ligne de fichier1 R1 R2 d1 ?

    Si oui, la 2ème relation ne devrait-elle pas être r1+r3<d2 au lieu de r2+r3<d2 ???

    Si c'est bien le cas, veux-tu dire que chaque ligne "Ri Rj dk" du fichier1 représente une relation "ri + rj < dk" ?

    Si oui, c'est très facile en bash:
    Tu lis le fichier2 (sauf la première ligne) en remplaçant " " par "=" et en utilisant 'eval' pour affecter les valeurs ri aux variables Ri.
    puis tu lis le fichier1 en remplaçant chaque ligne "Ri Rj dk" par quelque chose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if [[ $((Ri + Rj)) -lt dk ]] ; then ...

  3. #3
    Membre averti
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 37
    Par défaut
    oui j'ai fais une erreur (j'ai réctifié)
    effectivement si r2+r3<d5 afficher: R2 et R3 ne se chevauchent pas
    ou encore comme ce que tu as écris

    PS: je n'ai pas la première ligne dans mes deux fichiers je les ai écrit pour être plus explicite.
    Je ne connais pas grand chose sous bash veuillez être plus explicite svp
    Merci

  4. #4
    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 BIG123 Voir le message
    oui j'ai fais une erreur
    effectivement si r2+r3<d5 afficher: R2 et R3 ne se chevauchent pas
    ou encore comme ce que tu as écris

    PS: je n'ai pas la première ligne dans mes deux fichiers je les ai écrit pour être plus explicite.
    Je ne connais pas grand chose sous bash veuillez être plus explicite svp
    Merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ cat fichier1
    R1  3
    R2  5
    R3  1
    R4  6
    R5  2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ cat fichier2
    R1   R2  1
    R1   R3  2
    R1   R4  3
    R1   R5  4
    R2   R3  5
    R2   R4  6
    R2   R5  7
    R3   R4  8
    R3   R5  9
    R4   R5  10
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ ./dist_comp.sh
    R1 et R2 se chevauchent
    R1 et R3 se chevauchent
    R1 et R4 se chevauchent
    R1 et R5 se chevauchent
    R2 et R3 se chevauchent
    R2 et R4 se chevauchent
    R2 et R5 se chevauchent
    R3 et R4 ne se chevauchent pas
    R3 et R5 ne se chevauchent pas
    R4 et R5 ne se chevauchent pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ cat ./dist_comp.sh
    #!/bin/ksh
     
    eval $(sed -e 's/  */=/' fichier1)
     
    while read Ri Rj Dk ; do
        [[ $(($Ri + $Rj)) -lt $Dk ]]	\
            && print "$Ri et $Rj ne se chevauchent pas"	\
            || print "$Ri et $Rj se chevauchent"
    done < fichier2

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut jack-ft,

    Aurais-tu l'amabilité de m'expliquer les tenants et aboutissants de eval $(sed -e 's/ */=/' fichier1) s'il te plaît ? J'avoue ne pas en saisir la moindre utilité

    Merci

  6. #6
    Membre averti
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 37
    Par défaut
    @jack-ft merci bcp pour ta réponse elle marche très bien
    mais j'aimerai bien comprendre d'avantage la première ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    eval $(sed -e 's/  */=/' fichier1)
    (vu mes connaissances très limitées dans les scripts shell.

  7. #7
    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 zipe31 Voir le message
    Salut jack-ft,

    Aurais-tu l'amabilité de m'expliquer les tenants et aboutissants de eval $(sed -e 's/ */=/' fichier1) s'il te plaît ? J'avoue ne pas en saisir la moindre utilité

    Merci
    Ben... si tu n'en vois pas la moindre utilité, je t'invite à tester en commentant la ligne!!!

    Citation Envoyé par BIG123 Voir le message
    @jack-ft merci bcp pour ta réponse elle marche très bien
    mais j'aimerai bien comprendre d'avantage la première ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    eval $(sed -e 's/  */=/' fichier1)
    (vu mes connaissances très limitées dans les scripts shell.
    @BIG123 et zipe31: Je vous invite aussi à tester en mode debug ksh -x ./dist_comp.sh pour voir plus précisément ce que fait le script! Je trouve que c'est assez instructif.

    Sinon vous pouvez aussi vous référer à ma première réponse rapide:

    Citation Envoyé par jack-ft Voir le message
    Tu lis le fichier2 (sauf la première ligne) en remplaçant " " par "=" et en utilisant 'eval' pour affecter les valeurs ri aux variables Ri.
    sauf qu'en cours de route, j'ai permuté fichier1 et fichier2...

    Est-ce plus clair?

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 31/10/2007, 09h10
  2. Réponses: 2
    Dernier message: 19/04/2007, 13h54
  3. Réponses: 4
    Dernier message: 13/12/2006, 17h10
  4. [EXCEL] Taille des colonnes d'un fichier HTML importé
    Par Rei Angelus dans le forum Excel
    Réponses: 4
    Dernier message: 08/04/2006, 07h58
  5. [VB.NET] DataGrid : titre des colonnes sur deux lignes
    Par Lahouari dans le forum Windows Forms
    Réponses: 6
    Dernier message: 06/12/2004, 14h44

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