Extraire numero ligne commun entre 2 fichiers

Résolu/Fermé
varen - Modifié par varen le 23/09/2011 à 14:33
varenji Messages postés 1 Date d'inscription vendredi 23 septembre 2011 Statut Membre Dernière intervention 23 septembre 2011 - 23 sept. 2011 à 15:58
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 dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
23 sept. 2011 à 15:27
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 mardi 26 juin 2007 Statut Membre Dernière intervention 9 mai 2016 34
23 sept. 2011 à 14:28
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 dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
23 sept. 2011 à 14:34
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
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 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
23 sept. 2011 à 15:17
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 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
23 sept. 2011 à 15:45
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 vendredi 23 septembre 2011 Statut Membre Dernière intervention 23 septembre 2011
23 sept. 2011 à 15:58
Merci pour vos reponses !
C'est tres sympa a vous !
A bientot !

varen
0