Extraire numero ligne commun entre 2 fichiers

Résolu
varen -  
varenji Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -
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
A voir également:

6 réponses

zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
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
koma_666 Messages postés 429 Date d'inscription   Statut Membre Dernière intervention   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
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
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
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
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
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
varenji Messages postés 1 Date d'inscription   Statut Membre Dernière intervention  
 
Merci pour vos reponses !
C'est tres sympa a vous !
A bientot !

varen
0