• # man awk

    Posté par . En réponse au message comparaison de fichier avec clefs. Évalué à 3.

    J'aime bien awk, alors je vais te guider un peu en espérant que tu apprennes à aimer awk.

    Les 2 lignes awk que tu donnes ne font pas ce que tu demandes.
    Elles affichent les clefs communes aux 2 fichiers avec la valeur de la clef dans le second fichier.
    Dans les 2 cas, tu reçois j, l, o et b.

    Découpons

    La 1re partie lit tout le premier fichier en mémoire dans un tableau et enregistre les clefs sans les valeurs (la valeur est = 1)
    NR == FNR{ligne[1ドル]=1}

    La 2e partie
    NR != FNR {...}
    est exécutée quand awk passe au 2e fichier. FNR recommence à 1 et NR continue sa progression.
    Si la clef de la ligne du fichier 2 se trouve dans le tableau, on imprime la ligne.
    Note que ligne[2ドル] est vide. Pax exemple sur la ligne "j 4", awk trouve ligne[j], mais ligne[4] n'existe pas.

    Il manque une négation dans le test :
    awk 'NR == FNR{ligne[1ドル]=1} NR != FNR {if(!(1ドル in ligne))print}' fichier1 fichier2
    a 4
    d 2
    k 5

    Pour les lignes à clef commune, le test initial est le bon et pour avoir les 2 valeurs, il suffit d'avoir stocké la valeur au lieu de 1.

    awk -v OFS="\t" 'NR == FNR{ligne[1ドル]=2ドル} NR != FNR {if((1ドル in ligne))print 1,ドル ligne[1ドル], 2ドル}' fichier1 fichier2
    j 20 4
    l 6 6
    o 7 8
    b 4 4