#1 Le 09/06/2010, à 03: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... ).
Dernière modification par Mpok (Le 10/06/2010, à 12:29)
Hors ligne
#2 Le 09/06/2010, à 06: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, à 06: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.
En ligne
#4 Le 09/06/2010, à 08:43
- Totor
Re : [Résolu] Combiner 2 fichiers
$ 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, à 08:54
- credenhill
Re : [Résolu] Combiner 2 fichiers
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, à 09:10
- Totor
Re : [Résolu] Combiner 2 fichiers
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
-- Lucid Lynx --
Hors ligne
#7 Le 09/06/2010, à 09: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, à 09: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, à 09:36)
-- Lucid Lynx --
Hors ligne
#9 Le 10/06/2010, à 12: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
Hors ligne