3 votes

unix : fusion de fichiers basée sur la valeur d'une colonne

J'ai deux fichiers, qui ressemblent à ceci :

Dossier 1 (2 colonnes) :

ID1 123
ID2 234
ID3 232
ID4 344
...

Fichier 2 (>1 million de colonnes)

ID2 A C ...
ID3 G T ...
ID1 C T ...
ID4 A C ... 
...

Je veux ajouter les valeurs de la colonne 2 du fichier 1 en fonction de l'ID au fichier 2 comme deuxième colonne. Ainsi, le fichier fusionné devrait ressembler à ceci :

ID2 234 A C ...
ID3 232 G T ...
ID1 123 C T ...
ID4 344 A C ... 
...

C'est donc exactement la même chose que le fichier 2 (même ordre des lignes), mais avec la deuxième colonne ajoutée. Les ID sont les valeurs de la première colonne (présentes dans les deux fichiers). Le fichier 1 a plus de lignes/ID que le fichier 2. Tous les ID du fichier 2 sont dans le fichier 1, mais tous les ID du fichier 1 ne sont pas dans le fichier 2.

Quelqu'un sait-il comment faire cela sous unix/bash ? Merci beaucoup !

6voto

kev Points 41855
$ join <(sort file1) <(sort file2)
ID1 123 C T ...
ID2 234 A C ...
ID3 232 G T ...
ID4 344 A C ...

Si vous voulez garder l'ordre de file2

$ join -1 1 -2 2 <(sort file1) <(cat -n file2 | sort -k2,2) | sort -k3,3n | cut -d' ' -f1-2,4-
ID2 234 A C ...
ID3 232 G T ...
ID1 123 C T ...
ID4 344 A C ...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X