Langage : shell
Commande présentée : join
Niveau : débutant
Présentation de la commande join
La commande join est disponible nativement sur les systèmes d'exploitation GNU/Linux. Il s'agit d'une commande POSIX et elle est donc présente sur tous les systèmes d'exploitation UNIX et UNIX-Like. La plupart des gens utilisent cette commande pour récupérer les lignes communes entre deux fichiers mais elle ne se limite pas à ce seul cas.
Join vous permet de fusionner des champs (colonnes) précis de deux fichiers textes et d'en récupérer la liste des données communes ou encore de vous afficher un résultat proche de ce que vous pourriez faire en SQL avec une requête JOIN.
Dans ce billet je vais vous montrer différentes façons dont on pourrait se servir de cette commande pour récupérer de l'information biologique à partir de données textuelles.
Préparation des fichiers
Nous nous proposons de trouver les identifiants UniProt des gènes d'Escherichia coli identifiés par le NCBI pour le cycle de Krebs. Pour cela il faut récupérer des données dans différentes banques de données.
Récupération des données sur les gènes d'Escherichia coli :
1 |
wget ftp://ftp.ncbi.nlm.nih.gov/gene/DATA/GENE_INFO/Archaea_Bacteria/Escherichia_coli_str._K-12_substr._MG1655.gene_info.gz |
Récupération des données UniProt d'Escherichia coli :
1 |
wget ftp://ftp.uniprot.org/pub/databases/uniprot/current_release/knowledgebase/idmapping/by_organism/ECOLI_83333_idmapping.dat.gz |
Liste des gènes du cycle de Krebs : (fichier : genes_cycle_krebs_ecoli.txt, source KEGG)
Ces fichiers présentent des données sous forme de colonnes.
Colonnes du fichier du NCBI :
- Numéro de taxon
- Identifiant du gène (GeneID)
- Symbole du gène
- Localisation du gène
- Synonymes
- Références croisées
- Chromosome
- Localisation sur la carte chromosomique
- Description
- Type de gène
- Symbole provenant de l'autorité de nomenclature
- Nom complet fourni par l'autorité de nomenclature
- Statut de la nomenclature
- Autres désignations
- Date de modification
Colonnes du fichier d'UniProt :
- Numéro d'accession UniProt
- Base de données d'origine
- Identifiant de la base de données d'origine
Dans un premier temps, nous allons extraire les informations sur les gènes à l'aide de la commande grep, comme décrite dans ce billet du blog :
1 |
grep -w -f genes_cycle_krebs_ecoli.txt Escherichia_coli_str._K-12_substr._MG1655.gene_info > geneinfo_krebs_ecoli.tsv |
Maintenant que les fichiers sont préparés, nous allons pouvoir faire deux exercices :
- une fusion simple des fichiers ;
- une fusion des fichiers avec sélection des colonnes d'intérêt.
Fusion simple
Avant de fusionner les fichiers, vous devez vous assurer qu'ils sont triés de la même façon sur les colonnes à fusionner. Par défaut la commande join fusionne sur la première colonne mais il est possible de préciser les colonnes pour chaque fichier.
Voici un exemple simple pour illustrer dans un premier temps la commande join :
1 2 3 4 5 6 7 8 9 10 11 12 |
cat fichier1.txt #ID Prénom 1 Arnaud 2 Constance 3 Julie 4 Constantin cat fichier2.txt #ID Console 1 Playstation 3 Nintendo DS 4 Wii-U |
La commande join va afficher sur chaque ligne le #ID, le Prénom et la Console pour chaque individu (les tabulations sont remplacées par des espaces, c'est le comportement par défaut de la commande) :
1 2 3 4 5 |
join fichier1.txt fichier2.txt 1 Arnaud Playstation 3 Julie Nintendo DS 4 Constantin Wii-U |
Dans nos exemples biologiques, nous travaillerons sur les identifiants GeneID des deux fichiers, soit la colonne 3 pour le fichier d'UniProt (option -1 3) et la colonne 2 pour le fichier du NCBI (option -2 2). De plus, nous avons besoin de trouver les données qui correspondent au NCBI dans le fichier d'UniProt. Dans un premier temps nous devons trier les colonnes de la même façon pour chacun des fichiers :
1 2 |
grep -w "GeneID" ECOLI_83333_idmapping.dat | sort -k 3,3n > ECOLI_83333_idmapping2.dat sort -k 2,2n geneinfo_krebs_ecoli.tsv > geneinfo_krebs_ecoli2.tsv |
La fusion simple se fait ainsi :
1 2 3 4 5 6 7 8 9 10 11 12 |
join -13 -22 ECOLI_83333_idmapping2.dat geneinfo_krebs_ecoli2.tsv 944794 P06959 GeneID 511145 aceF b0115 ECK0114|JW0111 EcoGene:EG10025 - - pyruvate dehydrogenase, dihydrolipoyltransacetylase component E2 protein-coding - - - - 20130526 944834 P0AFG8 GeneID 511145 aceE b0114 ECK0113|JW0110 EcoGene:EG10024 - - pyruvate dehydrogenase, decarboxylase component E1, thiamin-binding protein-coding - - - - 20130526 944854 P0A9P0 GeneID 511145 lpd b0116 ECK0115|JW0112|dhl|lpdA EcoGene:EG10543 - - lipoamide dehydrogenase, E3 component is part of three enzyme complexes protein-coding - - - - 20130526 [...] 948666 P0AC47 GeneID 511145 frdB b4153 ECK4149|JW4114 EcoGene:EG10331 - - fumarate reductase (anaerobic), Fe-S subunit protein-coding - - - - 20130526 948667 P00363 GeneID 511145 frdA b4154 ECK4150|JW4115 EcoGene:EG10330 - - fumarate reductase (anaerobic) catalytic and NAD/flavoprotein subunit protein-coding - - - - 20130526 948668 P0A8Q3 GeneID 511145 frdD b415 |