Joindre 2 fichiers sur champs communs

Résolu
nekomajin31 Messages postés 8 Statut Membre -  
dubcek Messages postés 18627 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 !

2 réponses

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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
  2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    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
    1. nekomajin31 Messages postés 8 Statut Membre
       
      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
    2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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
    3. nekomajin31 Messages postés 8 Statut Membre
       
      je viens d'essayer , et on le shell ne reconnait pas l'option "--nocheck-order"
      0
    4. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Quel système ? Quel shell ? Quelle version de join ?

      Sinon, voir ma réponse précédente...
      0
    5. nekomajin31 Messages postés 8 Statut Membre
       
      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