Joindre 2 fichiers sur champs communs

Résolu
nekomajin31 Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   -  
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   -
bonjour,

j'ai 2 textedit de la sorte :

A1 a
A2 c
A3 e
A4 d

& pour mon deuxième :

a 10
b 31
c 12
e 11

, j'aimerai avoir un shell , ou un awk, qui écrit les valeurs (10, 31...) dans mon premier shell, en associant , de tel sorte :

A1 a 10
A2 c 12
...
(une getline m'arrangerait..)

merci d'avance !
A voir également:

2 réponses

dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
hjello
avec awk
$ awk 'FNR==NR {t[$1]=$2; next} x=t[$2] {print $0, x}' fichier2  fichier1
A1 a 10
A2 c 12
A3 e 11
2
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Salut,

Il existe des commandes natives qui font ça très bien, et particulièrement la commande
join
:

$ head f*
==> f1 <==
A1 a
A2 c
A3 e
A4 d

==> f2 <==
a 10
b 31
c 12
e 11

$ join --nocheck-order -1 2 -2 1 -o 1.1,1.2,2.2 f1 f2
A1 a 10
A2 c 12
A3 e 11
1
nekomajin31 Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
 
bonjour, collègue 31 ^^

merci , je vais essayer ça dans la matinée !
en fait mes fichier sont assez long (centaines de ligne ) , c pr ça que j'envisageais une getline , je connaissais pas cette cmd. merci bcp
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Peut-être sera-t-il nécessaire de trier tes fichiers avant...

$ join -1 2 -2 1 -o 1.1,1.2,2.2  <(sort -k2 f1)  <(sort -k1 f2)
A1 a 10
A2 c 12
A3 e 11
0
nekomajin31 Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
 
je viens d'essayer , et on le shell ne reconnait pas l'option "--nocheck-order"
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Quel système ? Quel shell ? Quelle version de join ?

Sinon, voir ma réponse précédente...
0
nekomajin31 Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
 
oui je vais faire avec ta réponse précédente.
si je fais ceci :
$ join -1 2 -2 1 -o 1.1,1.2,2.2 <(sort -k2 f1) <(sort -k1 f2) > file_3


pour avoir en sortie directement dans un fichier , le file_3 reste vide
0