Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 09/06/2010, à 04:22

Mpok

[Résolu] Combiner 2 fichiers

Bonjour,

J'ai deux fichiers du genre :

Fichier_1 :
ident_1 : value_1
ident_2 : value_2
... etc

Fichier_2 :
ident_1 : value_1bis
ident_3 : value_3
... etc

Je veux obtenir un seul fichier, en combinant les fichiers initiaux, et en privilégiant (par un paramètre, par exemple, l'un des fichiers si les mêmes "ident_n" se retrouvent dans les deux fichiers).

Soit le résultat :
ident_1 : value_1 OU value_1bis (suivant le paramètre)
ident_2 : value_2
ident_3 : value_3
.. etc

J'ai essayé quelques commandes "simples" (awk, sed..) mais je bloque à chaque fois sur le fait que ces commandes ne traitent qu'une seule ligne à chaque fois, et sur un seul fichier à la fois (c'est d'ailleurs une autre question à venir... wink).

Dernière modification par Mpok (Le 10/06/2010, à 13:29)

Hors ligne

#2 Le 09/06/2010, à 07:41

credenhill

Re : [Résolu] Combiner 2 fichiers

hello
en changeant l'ordre dans lequel on traite les fichiers

 $ cat a1
ident_1 : value_1
ident_2 : value_2
$ cat a2
ident_1 : value_1bis
ident_3 : value_3
$ 
$ awk -F":" '{x[$1]=$0};END{for (n in x)print x[n]}' a1  a2
ident_1 : value_1bis
ident_2 : value_2
ident_3 : value_3
$
$ awk -F":" '{x[$1]=$0};END{for (n in x)print x[n]}' a2 a1
ident_1 : value_1
ident_2 : value_2
ident_3 : value_3
$

Hors ligne

#3 Le 09/06/2010, à 07:47

Watael

Re : [Résolu] Combiner 2 fichiers

ce type d'opération se fait sur des fichiers triés.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#4 Le 09/06/2010, à 09:43

Totor

Re : [Résolu] Combiner 2 fichiers

credenhill a écrit :
$ awk -F":" '{x[$1]=$0};END{for (n in x)print x[n]}' a1  a2
ident_1 : value_1bis
ident_2 : value_2
ident_3 : value_3
$
$ awk -F":" '{x[$1]=$0};END{for (n in x)print x[n]}' a2 a1
ident_1 : value_1
ident_2 : value_2
ident_3 : value_3
$

Sauf erreur de ma part, ta sortie ne correspond pas à ton code !

Sinon join est typiquement fait pour cela.  Et dans ce cas, comme le dit Watael, les fichiers doivent être triés (--> sort) (Mais pas avec la solution de credenhill)
On obtient quelque chose comme ceci :

join -t':' -j 1 -o 1.1, 1.2 <(sort fich1) <(sort fich2)

inverse fich1 et fich2 suivant ce que tu souhaites obtenir.
et au besoin, modifie les tris et les options de jointure.


-- Lucid Lynx --

Hors ligne

#5 Le 09/06/2010, à 09:54

credenhill

Re : [Résolu] Combiner 2 fichiers

Totor a écrit :

Sauf erreur de ma part, ta sortie ne correspond pas à ton code !

mais c'est bien sûr, j'ai tout retapé

Hors ligne

#6 Le 09/06/2010, à 10:10

Totor

Re : [Résolu] Combiner 2 fichiers

credenhill a écrit :

mais c'est bien sûr, j'ai tout retapé

est-ce de l'ironie ? (je ne sais pas comment le prendre)
du coup, j'ai rejeté un coup d'oeil au code et autant pour moi, je n'avais pas vu que tu affectais la ligne entière ($0). Je pensais que c'était $2 big_smile


-- Lucid Lynx --

Hors ligne

#7 Le 09/06/2010, à 10:13

credenhill

Re : [Résolu] Combiner 2 fichiers

bien sûr, depuis l'invention du copier/coller on ne peut plus mentir

Hors ligne

#8 Le 09/06/2010, à 10:30

Totor

Re : [Résolu] Combiner 2 fichiers

le copier/coller n'empêche pas les erreurs de copie !
(mais là, c'est bien moi qui suis en erreur)

Dernière modification par Totor (Le 09/06/2010, à 10:36)


-- Lucid Lynx --

Hors ligne

#9 Le 10/06/2010, à 13:29

Mpok

Re : [Résolu] Combiner 2 fichiers

Merci à vous deux.
Effectivement j'avais oublié de préciser que les fichiers étaient triés (mais ceci dit la méthode sans tri pourrait servir plus tard).
En tout cas, c'est bien plus simple que ce je savais essayé de faire tongue

Hors ligne