Extraire numero ligne commun entre 2 fichiers

Résolu
varen -  
varenji Messages postés 2 Statut Membre -
Bonjour,

je possede 2 fichiers contenant exactement les memes lignes. Dans le 2eme fichier, les lignes sont dans le desordre.
Je souhaite creer un 3eme fichier contenant les lignes du 1er fichier dans l'ordre (pas de changement) et a cote de chaque ligne (separer par un espace ou un truc du genre ..), le numero de ligne de la meme occurence dans le 2nd fichier.

Fichier 1 :
test_1
test_5
test_2
test_3

Fichier 2 :
test_5
test_3
test_1
test_2

Le fichier de sortie devrait ressembler a ca :
test_1 3
test_5 1
test_2 4
test_3 2

Je ne sais pas si c'est possible ! Votre aide me sera tres precieuse,
merci a vous.

Varen

6 réponses

  1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Alors comme ça :

    $ while read line; do echo -n "$line " && sed -n "/$line/=" fich2; done < fich1
    test_1 3
    test_5 1
    test_2 4
    test_3 2
    
    $ 
    2
  2. koma_666 Messages postés 473 Statut Membre 34
     
    Oui, je pense que cela est réalisable. Il faudrait que pour chaque position du fichier tu associes un nombre, et après, avec une comparaison avec le fichier 1, tu lui ajoutes la position.
    0
  3. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

    Avec "fgrep" c'est possible mais, l'ordre du fichier 1 n'est pas respecté et le numéro apparaît avant et non après ;-\

    $ cat fich1
    test_1
    test_5
    test_2
    test_3
    
    $ cat fich2
    test_5
    test_3
    test_1
    test_2
    
    $ fgrep -n -f fich1 fich2
    1:test_5
    2:test_3
    3:test_1
    4:test_2
    
    $ 

    ;-))
    0
    1. varen
       
      Merci pour vos reponses.
      Ce n'est pas tout a fait ce que je veux ...
      Je souhaite pour la ligne 1 du fichier 1, le numero de ligne de l'occurence dans le fichier 2 ...

      test_1 3
      test_5 1
      test_2 4
      test_3 2
      PS. desole, je voulais afficher toutes les solutions en ligne et j'ai en mail ...
      0
  4. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
     
    Salut,

    avec Bash, nl, grep et sed, et un fichier temporaire, on peut faire celà :

    $  nl -n rz fichier2 > fichier2_num ; cat fichier1 | while read ligne; do echo -n "$ligne "; grep $ligne fichier2_num | sed -e 's/\t.*$//'; done ; rm fichier2_num
    test_1 000003
    test_5 000001
    test_2 000004
    test_3 000002
    

    on devrait pouvoir se passer du fichier temporaire aussi, mais bon :-)

    Dal
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    $ cat a1
    test_1
    test_5
    test_2
    test_3
    $ cat a2
    test_5
    test_3
    test_1
    test_2 
    $ 
    $ awk 'BEGIN{while("cat a2"|getline)x[$0]=++n};{print $0, x[$0]}' a1 
    test_1 3
    test_5 1
    test_2 4
    test_3 2
    $ 
    
    0
  7. varenji Messages postés 2 Statut Membre
     
    Merci pour vos reponses !
    C'est tres sympa a vous !
    A bientot !

    varen
    0