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 :

AWK table hashage et comparaison entre deux fichiers


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 Shyma
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 100
    Par défaut AWK table hashage et comparaison entre deux fichiers
    Bonjour,

    Voilà, j'ai deux fichiers avec à l’intérieur des données différentes, le fichier 1 ($1, $2, je voudrais l'organiser en table de hash où tab[longeur]=valeur
    le fichier 1 se présente ainsi :
    45 CRTTARR
    594 GFIIEJ
    2 GFTTG
    61 GPPAN
    ----
    ----
    ----

    Le fichier 2, est beaucoup plus volumineux, je voudrais comparer $2 des deux fichiers, si c'est le même code, j'affiche la valeur $1 du fichier1 , dans $3 du fichier 2

    PS / Le tout dans un seul script

    Merci de votre aide

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    Bonjour,

    est-ce qu'on peut avoir les deux fichiers, et le résultat attendu ? on visualisera mieux.

    as-tu regardé ce que join peut faire ?
    ça a l'air de correspondre à ce que tu veux faire...
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre confirmé Avatar de Shyma
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 100
    Par défaut
    Salut @N_BaH

    Bah oui j'ai pensé à ça, mais les fichiers ne sont pas disposés pareil !

    J'ai le fichier 1 qui est comme ceci ($1, $2), je voudrais l'organiser en table de H, clé/valeur, et le comparer avec le fichier 2, qui aura le même code que $2, et si c'est le cas, récupérer la valeur qui correspond dans fichier 1 et l'afficher dans le fichier2.

    Fichier 1:
    421 tr|Q16951|5HTB2_APLCA
    509 uu|Q25414|5HTR_LYMST
    4 pp|P35904|ACH1_ACHFU
    531 ss|P35903|ACHC_ACHFU
    229 pa|P58154|ACHP_LYMST
    376 aa|Q964E3|ACTC_BIOAL
    376 ll|P92179|ACTC_BIOGL
    376 mr|Q964E1|ACTC_BIOOB

    Fichier 2 :
    NOM: tr|Q16951|5HTB2_APLCA 266 342 . Large_h 713836 737603 + 176 M 27 81 S 0 1 5 0 2 I 0 23532 3 0 2 S 1 2 M 6 18 G 0 3 M 42 126

    (le fichier 2 a plusieurs lignes comme celle qui j'ai partagé, mais il n'est pas complètement comme cette ligne, j'ai pris juste la ligne qui m’intéresse pour récupérer la valeur dans le fichier1, et l'utiliser après pour un calcul d'un score)

    Vous remarquez ici, le $2 des deux fichiers est le même, je voudrais donc récupérer la valeur 421 et l'afficher dans le fichier 2, donc pour tous les noms identiques récupérer les valeurs qui vont avec.

    Merci de votre aide et désolée si j'ai mal expliqué

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Shyma Voir le message
    J'ai le fichier 1 qui est comme ceci ($1, $2)
    Assez confu comme explication. C'est quoi pour toi "$1" et "$2" ???

    Citation Envoyé par Shyma Voir le message
    récupérer la valeur qui correspond dans fichier 1 et l'afficher dans le fichier2.
    Ca veut dire quoi la phrase "je veux afficher une valeur dans le fichier" ??? Quand on affiche c'est à l'écran qu'on affiche, pas dans un fichier...

    Citation Envoyé par Shyma Voir le message
    et désolée si j'ai mal expliqué
    Ben oui. Ce qui se conçoit bien s'énonce clairement.

    Bon bref voici mon jeu d'essai
    Fichier f1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    421 tr|Q16951|5HTB2_APLCA
    509 uu|Q25414|5HTR_LYMST
    4 pp|P35904|ACH1_ACHFU
    531 ss|P35903|ACHC_ACHFU
    229 pa|P58154|ACHP_LYMST
    376 aa|Q964E3|ACTC_BIOAL
    376 ll|P92179|ACTC_BIOGL
    376 mr|Q964E1|ACTC_BIOOB
    Fichier f2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tr|Q16951|5HTB2_APLCA 266 342
    Script
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/bin/bash
    cat f2 |while read ligne; do
    	clef=$(echo "$ligne" |cut -f1 -d' ')
    	result=$(grep "$clef$" f1)
    	echo $result |cut -f1 -d' '
    done

    Resultat:
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    les fichiers ne sont pas disposés pareil
    ça n'a pas d'importance : join utilise les champs qu'on lui indique.
    le plus problématique, c'est que tu ne souhaites pas récupérer la totalité du premier champ.

    awk peut le faire, mais c'est à toi de t'exercer, et de nous montrer ce que tu as fait, et où tu bloques.

    tu dois aussi faire un effort pour articuler ta pensée, l'exprimer de manière intelligible pour les autres, et illustrer ton propos par des exemples cohérents.
    y compris quand ça ne fait pas ce que tu souhaites.

    rigueur à la conception
    clarté à l'énoncé
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    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 Shyma Voir le message
    Salut @N_BaH

    Bah oui j'ai pensé à ça, mais les fichiers ne sont pas disposés pareil !

    J'ai le fichier 1 qui est comme ceci ($1, $2), je voudrais l'organiser en table de H, clé/valeur, et le comparer avec le fichier 2, qui aura le même code que $2, et si c'est le cas, récupérer la valeur qui correspond dans fichier 1 et l'afficher dans le fichier2.

    Fichier 1:
    421 tr|Q16951|5HTB2_APLCA
    509 uu|Q25414|5HTR_LYMST
    4 pp|P35904|ACH1_ACHFU
    531 ss|P35903|ACHC_ACHFU
    229 pa|P58154|ACHP_LYMST
    376 aa|Q964E3|ACTC_BIOAL
    376 ll|P92179|ACTC_BIOGL
    376 mr|Q964E1|ACTC_BIOOB
    Mon interprétation est que la 1ère ligne de "Fichier 1" contient les champs:
    $1 == 421
    $2 == tr|Q16951|5HTB2_APLCA

    (D'ailleurs, ce serait plus clair, si on connaissait les noms des champs (genre "score" et "identifiant du joueur")

    Fichier 2 :
    NOM: tr|Q16951|5HTB2_APLCA 266 342 . Large_h 713836 737603 + 176 M 27 81 S 0 1 5 0 2 I 0 23532 3 0 2 S 1 2 M 6 18 G 0 3 M 42 126

    (le fichier 2 a plusieurs lignes comme celle qui j'ai partagé, mais il n'est pas complètement comme cette ligne, j'ai pris juste la ligne qui m’intéresse pour récupérer la valeur dans le fichier1, et l'utiliser après pour un calcul d'un score)

    Vous remarquez ici, le $2 des deux fichiers est le même,
    Mon interprétation est que la 1ère ligne de "Fichier 2" contient les champs:
    $1 == NOM:
    $2 == tr|Q16951|5HTB2_APLCA
    $3 == 266
    etc.

    je voudrais donc récupérer la valeur 421
    Pour la ligne indiquée de "Fichier 2", le "$2" est "tr|Q16951|5HTB2_APLCA", qui correspond à la ligne de "Fichier 1" qui commence par "421".

    et l'afficher dans le fichier 2, donc pour tous les noms identiques récupérer les valeurs qui vont avec.
    Est-ce que tu veux faire l'équivalent de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    sed -i 's/tr|Q16951|5HTB2_APLCA/421/' "Fichier 2"
     
    =>
     
    NOM: 421 266 342 . Large_h 713836 737603 + 176 M 27 81 S 0 1 5 0 2 I 0 23532 3 0 2 S 1 2 M 6 18 G 0 3 M 42 126
    C'est bien ce que tu veux comme résultat?

    Si tu veux un autre résultat, merci de nous le présenter...

    Merci de votre aide et désolée si j'ai mal expliqué

  7. #7
    Membre confirmé Avatar de Shyma
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 100
    Par défaut
    Tout d'abord, merci pour vos réponses !

    Alors pour mieux comprendre ce que je veux faire; Comparer dans les deux fichiers, si il y a le même code, en l’occurrence comme ici, on a "tr|Q16951|5HTB2_APLCA" qui est présent dans les deux fichiers. Ensuite, si le code se trouve, récupérer la valeur qui lui correspond dans le fichier1 (ici c'est 421), pour l'afficher et pouvoir l'utiliser pour calculer le score, qui dans mon exemple (NOM: B(un premier score que j'ai calculé) 421)
    J'ai besoin de calculer ce score là : (B/421)*100. (J'espère que c'est assez clair ! )

    Fichier 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    421 tr|Q16951|5HTB2_APLCA
    509 uu|Q25414|5HTR_LYMST
    4 pp|P35904|ACH1_ACHFU
    531 ss|P35903|ACHC_ACHFU
    229 pa|P58154|ACHP_LYMST
    376 aa|Q964E3|ACTC_BIOAL
    376 ll|P92179|ACTC_BIOGL
    376 mr|Q964E1|ACTC_BIOOB
    Fichier 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     NOM: tr|Q16951|5HTB2_APLCA 266 342 . Large_h 713836 737603 + 176 M 27 81 S 0 1 5 0 2 I 0 23532 3 0 2 S 1 2 M 6 18 G 0 3 M 42 126
    Résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     NOM: B(un premier score que j'ai calculé) 421
    En fait, j'ai un script awl, qui fait le traitement sur les deux fichiers pour générer un troisième avec les résultats de mes calculs.

    Encore une fois, désolée pour ma mauvaise explication

    Le $1, et $2 (du fichier1) correspondent en fait aux colonnes, $1=colonne1, $2=colonne2.

  8. #8
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    c'est bizarre,
    quand on commence à te lire, on se dit que tu as compris comment exposer tes intentions,
    et puis, à la fin, on se retrouve avec une nouvelle donnée, floue.

    En fait, j'ai un script awl, qui fait le traitement sur les deux fichiers pour générer un troisième avec les résultats de mes calculs.
    donc, tu n'as pas besoin de nous !?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. Comparaison entre deux fichiers JS
    Par Cvanhove dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 12/05/2016, 21h04
  2. [Débutant] Comparaisons entre deux fichiers textes
    Par shootgirl dans le forum MATLAB
    Réponses: 9
    Dernier message: 27/09/2011, 14h50
  3. Comparaison entre deux tables
    Par Bes74 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 09/08/2007, 20h04
  4. Comparaison entre deux dates dans une table
    Par Biskot75 dans le forum Access
    Réponses: 6
    Dernier message: 19/09/2006, 11h16
  5. Comparaison entre deux champs de deux tables différentes
    Par liam81150 dans le forum Requêtes
    Réponses: 1
    Dernier message: 26/09/2005, 20h53

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