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
# man awk
Posté par undeuxtroisout . 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