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

  1. #1
    Membre à l'essai 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
    Points : 19
    Points
    19
    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 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 378
    Points
    19 378
    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 à l'essai 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
    Points : 19
    Points
    19
    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
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 685
    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 685
    Points : 30 974
    Points
    30 974
    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 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 378
    Points
    19 378
    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 101
    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 101
    Points : 5 849
    Points
    5 849
    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 à l'essai 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
    Points : 19
    Points
    19
    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 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 378
    Points
    19 378
    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.

  9. #9
    Membre à l'essai 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
    Points : 19
    Points
    19
    Par défaut
    Bonjour @N_BaH

    Bien sure que si j'ai besoin d'aide, le script en question traite le fichier 2(réorganiser, supprimer quelques lignes, et calculer quelques données), et là je suis à l'étape où j'ai besoin de récupérer le résultat du fichier 1 pour définir un score.
    Mon problème :
    1- Comment stoker les données du fichier 1 en table de Hash?
    2- Comment comparer les deux fichiers, et récupérer le résultat.

    Voilà grosso modo où je bloque.

  10. #10
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 277
    Points : 12 722
    Points
    12 722
    Par défaut
    Bonjour,

    Tu ne veux vraiment pas donner un aperçu de ton code...

    Un départ (code pas du tout testé) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F\| 'FNR == NR { A[$2]=$1; next }; $2 in A { print "ici, $2 du fichier 2 existe bien dans fichier 1, donc le $1 de fichier 1 est: " A[$2]}' fichier1 Fichier2
    Cordialement.

  11. #11
    Membre à l'essai 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
    Points : 19
    Points
    19
    Par défaut
    Bonjour @disedorgue

    Le script seul marche et donne le résultat que je veux, quoi que, mon but c'est de faire un seul script, c-à-d avec le premier qui traite le fichier 2. Mais sinon, voilà un aperçu de mon code qui traite le fichier2.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    cat Fichier2 |grep -v '#'| sed 's/;/\t/g' \
       | awk '{if ($3 == "Info1") print $1"      ", " "$2, " "$3, " "$4, " "$5, " "$6, " "$7, " "$12," "$16, " "$19, " "$9, " "$10}
              {if ($3 == "Info2") print $1"      ", " "$2, " "$3, " "$4, " "$5, " "$6," " $7}
              {if ($3 == "Info3") a=$12}
              {if ($3=="Info4") b=$12}
              {if ($3 == "intron") print $1"      ", " "$2, " "$3, " "$4," " $5," "$6, " "$7, " "$9, a, b}
              {if ($1=="Info5") print $1="Moyenne"_+++1, ($4-$3)+1}
              {if ($1=="Info6") }
              {
                 cat Fichier1 FNR == NR { A[$2]=$1; next };
                 $2 in A { print length = A[$2]}
              }' > fichierTri
    Pour l'instant, j'essai ta réponse, mais il y a des erreurs

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 378
    Points
    19 378
    Par défaut
    il y a des erreurs
    mais lesquelles !?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat nbr_aciA FNR == NR { A[$2]=$1; next };
    cat nbr_aciA, c'est sans doute une erreur de recopie.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat Fichier2 |grep -v '#'| sed 's/;/\t/g'
    cat est un UUOC (Useless Use Of Cat) : grep sait lire un fichier tout seul, mais
    les manipulations faites par grep et sed devraient figurer dans le code awk.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  13. #13
    Membre à l'essai 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
    Points : 19
    Points
    19
    Par défaut
    @N_Bah

    Je n'ai pas compris, que veux-tu dire par
    mais
    les manipulations faites par grep et sed devraient figurer dans le code awk.
    J'essaie, à partir de mon script lire le fichier1, comparer et récupérer les données qui m’intéressent, et l’afficher.

    L’erreur, c'est que je n'arrive pas à le lire justement, donc à charger la table (cat fichier 1)

    Mon script, je le commence par "cat fichier2", et ensuite je fais un traitement sur, je pense qu'il n'arrive pas à l'ouvrir à cause de ça.

    En gros, je ne sais pas comment appliquer cette comparaison avec le fichier1, alors que tout le script traite le fichier2.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 378
    Points
    19 378
    Par défaut
    tu n'as pas bien lu le code de disedorgue. awk lit les deux fichiers. dans le man de awk, regarde la différence entre NR et FNR.

    ce que font grep et sed (traiter les lignes qui ne sont pas des commentaires, et remplacer les ; par des tabulations) devrait être fait par awk, en l'intégrant dans le code awk.
    comment le dire plus clairement ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  15. #15
    Membre à l'essai 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
    Points : 19
    Points
    19
    Par défaut
    Je comprends que cela nous permet la manipulation des deux fichiers en même temps, et cela permet de ne pas confondre (par exemple $1 du fichier 1 du fichier 2 )...MAIS, je ne sais pas comment cela s'utilise.

    J'ai utilisé sa réponse comme elle est, mais cela ne marche pas

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 378
    Points
    19 378
    Par défaut
    Citation Envoyé par Shyma
    cela ne marche pas
    Citation Envoyé par NBaH
    [...] illustrer ton propos par des exemples cohérents.
    y compris quand ça ne fait pas ce que tu souhaites.
    en même temps, copier des bouts de code dans du préexistant sans remettre à plat toute la démarche, ben, ouais, ça marche pas.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  17. #17
    Membre à l'essai 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
    Points : 19
    Points
    19
    Par défaut
    Bah c'est pour comprendre ce que fait le code justement, je débute avec awk, donc je ne connais pas du tout les fonctions FNR et NR (d'ailleurs si tu peux m'expliquer ça m'aiderai beaucoup), bien que j'ai vu des exemples, je ne saisi toujours pas comment les utiliser)

    Concernant ta remarque pour sed et grep, comment les intégrer dans awk ? -----je n'ai pas compris !!

    Pour le cat fichier 2, au début de mon script, tu me conseilles de l'enlever et de mettre à la fin avec le fichier 1 (exemple : fichier 2 fichier 1) ???

  18. #18
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 277
    Points : 12 722
    Points
    12 722
    Par défaut
    Sinon quand on a plein de filtre pour le fichier2 avant de passer dans le awk qui doit traiter en premier le fichier1, on peut le faire sous cette forme (en rouge les références au fichier2) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat fichier2 | filtre 1 | filtre 2 | filtre n | awk -F\| 'FNR == NR {A[$2]=$1 ; next} {..............}' fichier1 -
    Dans ce cas, le tiret final est la référence à l'entrée du pipe vu par awk, et donc le fichier1 sera bien traité en premier par awk.
    Reste plus qu'à remplacer le {..............} par ton code qui traite le fichier2 et la corrélation entre les 2 fichiers.
    Le FNR == NR {A[$2]=$1;next} doit rester au début du code awk !!!
    Cordialement.

  19. #19
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 277
    Points : 12 722
    Points
    12 722
    Par défaut
    Citation Envoyé par Shyma Voir le message
    Bah c'est pour comprendre ce que fait le code justement, je débute avec awk, donc je ne connais pas du tout les fonctions FNR et NR (d'ailleurs si tu peux m'expliquer ça m'aiderai beaucoup), bien que j'ai vu des exemples, je ne saisi toujours pas comment les utiliser)
    FNR ==> compteur de ligne du fichier en cours.
    NR ==> compteur de ligne global.
    next ==> dit à awk de passer à la ligne suivante.

    Donc, l'égalité FNR==NR reste vrai tant qu'on lit le premier fichier, car FNR sera réinitialisé à chaque nouveau fichier, ce qui 'nest pas le cas pour NR qui lui continue à s'incrémenter.
    Cordialement.

  20. #20
    Membre à l'essai 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
    Points : 19
    Points
    19
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    cat Fichier2 |grep -v '#'| sed 's/;/\t/g'\| awk -F\| 'FNR == NR {A[$2]=$1 ; next}    
              {if ($3 == "Info1") print $1"      ", " "$2, " "$3, " "$4, " "$5, " "$6, " "$7, " "$12," "$16, " "$19, " "$9, " "$10}
              {if ($3 == "Info2") print $1"      ", " "$2, " "$3, " "$4, " "$5, " "$6," " $7}
              {if ($3 == "Info3") a=$12}
              {if ($3=="Info4") b=$12}
              {if ($3 == "info5") print $1"      ", " "$2, " "$3, " "$4," " $5," "$6, " "$7, " "$9, a, b}
              {if ($1=="Info6") print $1="Moyenne"_+++1, ($4-$3)+1}
              {if ($1=="info6" A[$2]=$1; next };$2 in A { print length = A[$2]}
              }' Fichier1 - > fichierTri
    Si il traite le fichier 1 d'abord, comment faire la transition au fichier 2 ? Faut-il ajouter autre chose ?

    Avec le code, il ne reconnait pas le A

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