Manipuler des fichiers#
Télécharger et décompresser un fichier#
Pour le téléchargement, on pourra utiliser par exemple la commande
wget
.Pour la décompression on utilisera la commande
gunzip
si le fichier a été compressé avec l’algorithmegzip
(extension .gz)
# On se déplace dans annotations
# remplacer <project>
# cd /shared/projects/<project>/annotations/hg38
cd /shared/projects/2325_ebaii/coursLinux/demo/annotations/hg38
?2004h
mkdir bed; cd bed
# On télécharge le fichier
wget https://zenodo.org/record/5716151/files/hg38_exons.bed.gz
--2023-11-04 12:46:47-- https://zenodo.org/record/5716151/files/hg38_exons.bed.gz
Resolving zenodo.org (zenodo.org)... 188.185.33.206, 188.185.10.78, 188.185.22.33, ...
Connecting to zenodo.org (zenodo.org)|188.185.33.206|:443... connected.
HTTP request sent, awaiting response... 301 MOVED PERMANENTLY
Location: /records/5716151/files/hg38_exons.bed.gz [following]
--2023-11-04 12:46:47-- https://zenodo.org/records/5716151/files/hg38_exons.bed.gz
Reusing existing connection to zenodo.org:443.
HTTP request sent, awaiting response... 200 OK
Length: 8838009 (8.4M) [application/octet-stream]
Saving to: ‘hg38_exons.bed.gz’
100%[======================================>] 8,838,009 11.6MB/s in 0.7s
2023-11-04 12:46:48 (11.6 MB/s) - ‘hg38_exons.bed.gz’ saved [8838009/8838009]
# Le fichier compressé (finit par ".gz"). Il pèse 8,4Mo.
ls -lh
total 68K
-rw-rw----+ 1 pfrancois pfrancois 8.5M Nov 4 12:46 hg38_exons.bed.gz
# Vérification du type de fichier
file hg38_exons.bed.gz
hg38_exons.bed.gz: gzip compressed data, was "hg38_exons.bed", from Unix, last modified: Tue Nov 20 11:29:21 2018
Le .gz
indique que le fichier est compressé. Si vous faites un head sur ce fichier, vous risquez de ne rien comprendre.
# On le décompresse
gunzip hg38_exons.bed.gz
# Le fichier a perdu l'extension gz. Il pèse 81Mo.
ls -lh
total 65M
-rw-rw----+ 1 pfrancois pfrancois 81M Nov 4 12:46 hg38_exons.bed
# Vérification du type de fichier : il a changé.
file hg38_exons.bed
hg38_exons.bed: ASCII text
Le fichier hg38_exons.bed#
Contient les coordonnées (début/fin) des exons humains au format BED.
Focus sur le format BED#
Type de fichier#
Annotation
Signification du nom#
Browser Extensible Format
Qui le génère#
Les outils d’annotation, TopHat
Qui le lit#
Les visualisateurs, vous
Remarque#
Le format BED est un format multi-forme, qui peut être utilisé dans beaucoup de contextes.
Exemple 1 - BED6 (simple)#
chr1 100 200 peak_1 123 +
Explications#
Chaque ligne est une annotation. Les informations sont tabulées, ie. chaque ligne contient un nombre fixe de colonnes (ici, 5), séparées par des tabulations.
Le format BED est utilisé pour beaucoup de types d’annotations, comme les régions MACS :
(chr1) le nombre du chromosome (ou du scaffold)
(100) position extrême en 5’
(2099) position extrême en 3’
(peak_1) nom de l’annotation
(123) score pour cette région
(+) brin
Dans d’autres contextes, on peut ne trouver que les 3 premiers champs.
Exemple 2 - BED12 (jonctions entre exons)#
chr1 990 2099 JUNC00001560 3 + 990 2099 255,0,0 2 40,67 0,1042
Explications#
Ici, le format contient 12 colonnes (BED12):
(chr1) le nombre du chromosome (ou du scaffold)
(990) position extrême en 5’ des lectures chevauchant la jonction
(2099) position extrême en 3’ des lectures chevauchant la jonction
(JUNC00001560) nom systématique de la jonction
(3) nombre de lectures couvrant la jonction
(+) brin
(990) même chose que la colonne 2
(2099) même chose que la colonne 3
(255,0,0) code couleur (RVB)
(2) pas important
(40,67) taille maximum des lectures couvrant l’exon à gauche et à droite de l’intron.
(0,1042) pas important
Pour en savoir plus#
Documentation : http://genome.ucsc.edu/FAQ/FAQformat.html#format1
Notre fichier#
chr1 100000636 100000739 RNU6-1318P|ENST00000365389|snRNA . -
chr1 100007033 100007156 AC118553.2|ENST00000638792|protein_coding . +
chr1 100007033 100007156 AC118553.2|ENST00000638968|nonsense_mediated_decay . +
chr1 100007033 100007156 AC118553.2|ENST00000639037|protein_coding . +
chr1 100007033 100007156 AC118553.2|ENST00000639040|nonsense_mediated_decay . +
chr1 100007033 100007156 AC118553.2|ENST00000639171|nonsense_mediated_decay . +
chr1 100007033 100007156 AC118553.2|ENST00000640238|nonsense_mediated_decay . +
chr1 100007033 100007156 AC118553.2|ENST00000640357|nonsense_mediated_decay . +
chr1 100007033 100007156 SLC35A3|ENST00000370153|protein_coding . +
chr1 100007033 100007156 SLC35A3|ENST00000370155|nonsense_mediated_decay . +
Note
Positions Start et End sont toujours données par rapport au sens 5’/3’ du brin +. Les coordonnées sont ‘zero-based, half-open’ [0, n)
(une autre convention est l’intervalle clos [1,n]
)
Visualiser le contenu d’un fichier#
On utilisera
less
oumore
(*) pour parcourir le fichier ligne à ligne (logiciels de type ‘pager’).On utilisera
head
outail
pour voir les n premières ou n dernières lignes d’un fichier.La commande
cat
permet de renvoyer tout le contenu d’un fichier sur la sortie standard (l’écran).+ c (cancel) pour arrêter. Les raccourcis clavier dans less sont les mêmes que pour la commande man.
() Less does more or less the same as more, but rather more than less, I like less more than more (Jacques van Helden) () Un avantage de less est qu’on peut remonter en arrière; avec more … c’est mort (Marc Deloger)
Raccourcis dans less
↑ : se déplacer vers le haut.
↓ : se déplacer vers le bas.
> : Aller à la première ligne.
< : Aller à la dernière ligne.
/chr : pour chercher le terme ‘chr’ (puis touche ‘enter’).
n : (next) pour chercher la prochaine occurrence de ‘truc’.
p: (previous) pour chercher l’occurrence précédente de ‘truc’.
q : pour quitter.
Exercices#
Utilisez la commande
head
pour regarder les 10 premières lignes du fichier hg38_exons.bedUtilisez la commande
tail
pour regarder les 10 dernières lignes du fichier hg38_exons.bedPromenez-vous dans le fichier hg38_exons.bed en utilisant la commande less. Quittez
less
.Renvoyer le contenu du fichier à l’écran avec
cat
.
Note
Si la lecture vous fatigue, utilisez <ctrl> + c
(cancel) pour arrêter le défilement. *Attention ce truc ne semble pas bien marcher à travers Jupyter Lab
Solutions#
head -n 10 hg38_exons.bed
chr1 100000636 100000739 RNU6-1318P|ENST00000365389|snRNA . -
chr1 100007033 100007156 AC118553.2|ENST00000638792|protein_coding . +
chr1 100007033 100007156 AC118553.2|ENST00000638968|nonsense_mediated_decay . +
chr1 100007033 100007156 AC118553.2|ENST00000639037|protein_coding . +
chr1 100007033 100007156 AC118553.2|ENST00000639040|nonsense_mediated_decay . +
chr1 100007033 100007156 AC118553.2|ENST00000639171|nonsense_mediated_decay . +
chr1 100007033 100007156 AC118553.2|ENST00000640238|nonsense_mediated_decay . +
chr1 100007033 100007156 AC118553.2|ENST00000640357|nonsense_mediated_decay . +
chr1 100007033 100007156 SLC35A3|ENST00000370153|protein_coding . +
chr1 100007033 100007156 SLC35A3|ENST00000370155|nonsense_mediated_decay . +
tail -n 10 hg38_exons.bed
less hg38_exons.bed # q to quit
cat hg38_exons.bed
Compter les lignes d’un fichier#
Utiliser la commande wc
(word count) avec l’argument -l (line).
wc -l hg38_exons.bed # 1261870 exons
1261870 hg38_exons.bed
Extraire des colonnes#
Pour extraire des colonnes on utilisera la commande
cut
avec l’argument-f
(field)Les colonnes du fichiers doivent nécessairement être séparées par une tabulation (sinon utiliser l’argument
-d
pour ‘delimiter’)
Tip
Si la lecture vous fatigue, utilisez
# extraire la colonne 1
cut -f 1 hg38_exons.bed
# extraire les colonnes 1 et 2
cut -f 1,2 hg38_exons.bed
# cut ignore malheureusement l’ordre indiqué
cut -f 2,1 hg38_exons.bed
# extraire la colonne 3 jusqu'à 5
cut -f 3-5 hg38_exons.bed
# extraire depuis la colonne 3 jusqu'à la fin de la ligne
cut -f 3- hg38_exons.bed
Trier un fichier#
Il faut utiliser la commande sort
(tri alphabétique par défaut).
-k
(key): e.g-k1,1
utiliser les caractères de la kolonne 1 à 1 pour le tri.-k2,2nr
utiliser les caractères de la colonne 2 à 2 pour faire un tri numérique (entiers) en inversant l’ordre (reverse).-k2,2g
(–general-numeric-sort) pour effectuer, sur la colonne 2, un tri sur des valeurs décimales.
# Tri alphabétique en considérant tous les caractères de chaque ligne
sort hg38_exons.bed
# Tri par chromosome (colonne 1)
sort -k1,1 hg38_exons.bed
# Trier le fichier sur la colonne 1 (chromosomes, tri alphabétique)
# puis par colonne 2 (starts, tri numérique):
# Trier les lignes par coordonnées
sort -k1,1 -k2,2nr hg38_exons.bed