Redirections#

  • Entrée standard (stdin): un fichier ou du texte (un flux de texte).

  • Sortie standard (stdout, “output 1”): renvoyée à l’écran par défaut et transférée via le tube.

  • Erreur standard (stderr, “output 2”): renvoyée à l’écran par défaut et non transférée via le tube.

  • Opérateurs de redirection

    • | : le caractère “pipe” passe le flux de texte stdin à une autre commande

    • > file.txt : stocke le flux stdout en créant (ou écrasant) le fichier file.txt

    • >> file.txt : stocke le flux stdout en ajoutant des lignes dans le fichier file.txt

    • 2> log.txt : stocke le flux stderr dans un fichier nommé log.txt

    • 1> file.txt 2> log.txt : stocke stdout dans un fichier et stderr dans un autre

Note

Si vous souhaitez rediriger stdout et stderr dans le même fichier : &> monFichier.txt

Un exemple#

Compter le nombre de fichiers d’extension “bed” présents dans le répertoire où vous êtes.

cd /shared/projects/form_2022_32/coursLinux/demo/annotations/hg38/bed
ls -l *.bed | wc -l
1
?2004h

Exercices#

  • Hommage à Marseille

    • Utilisez les commandes head pour visualiser les 51 premières lignes du fichier hg38_exons.bed et renvoyer le résultat dans less

  • Hommage au finistère

    • Utilisez les commandes head et tail pour récupérer la 29ème ligne du fichier hg38_exons.bed.

# On utilise head puis un tube qui renvoie vers less. 
# Tapez q pour quitter.
head -n 51 hg38_exons.bed | less 
# On récupère les 29 premières lignes avec head,
# puis on extrait de ce flux de texte la dernière ligne avec tail
head -n 29 hg38_exons.bed | tail -n 1

Demo: enchaînements de commandes#

# Obtenir la liste non redondante de chromosomes présents dans le fichier
cut -f 1 hg38_exons.bed | sort | uniq
chr1
chr10
chr11
chr12
chr13
chr14
chr15
chr16
chr17
chr18
chr19
chr2
chr20
chr21
chr22
chr3
chr4
chr5
chr6
chr7
chr8
chr9
chrX
chrY
# Nombre de chromosomes différents
cut -f 1 hg38_exons.bed | sort | uniq | wc -l
24
# Obtenir la liste des chromosomes présents dans le fichier et 
# le nombre d'occurrence de chacun d'entre eux
# ‘-c=count’
cut -f 1 hg38_exons.bed | sort | uniq -c
 117347 chr1
  46414 chr10
  75294 chr11
  72970 chr12
  20371 chr13
  43618 chr14
  47068 chr15
  60375 chr16
  77950 chr17
  22378 chr18
  73716 chr19
  97092 chr2
  28097 chr20
  14332 chr21
  27854 chr22
  80596 chr3
  49351 chr4
  55719 chr5
  56433 chr6
  60961 chr7
  45192 chr8
  45468 chr9
  39510 chrX
   3764 chrY
# La liste des chromosomes présents dans le fichier et leur nombre trié
# par ordre décroissant (-r: reverse, -n: numeric, -k: ‘kolonne’)
cut -f 1 hg38_exons.bed | sort | uniq -c | sort -nr -k 1,1
 117347 chr1
  97092 chr2
  80596 chr3
  77950 chr17
  75294 chr11
  73716 chr19
  72970 chr12
  60961 chr7
  60375 chr16
  56433 chr6
  55719 chr5
  49351 chr4
  47068 chr15
  46414 chr10
  45468 chr9
  45192 chr8
  43618 chr14
  39510 chrX
  28097 chr20
  27854 chr22
  22378 chr18
  20371 chr13
  14332 chr21
   3764 chrY

Note

La commande uniq permet d’éliminer les doublons dans un flux de texte trié

Exercice I#

  • En quoi la commande less diffère-t-elle de la commande more ? (15 pts)

  • En utilisant la command grep indiquez : (5 pts)

    • Combien y-a-t-il d’exons sur le chromosome 22 ?

    • Combien de lignes correspondant aux exons présents sur le chromosome chr22 contiennent le terme lincRNA ?

Solution#

grep "chr22" hg38_exons.bed | wc -l
27854
grep "chr22" hg38_exons.bed | grep "lincRNA" | wc -l
846
grep -c "chr22" hg38_exons.bed 
27854
grep "chr22" hg38_exons.bed | grep -c "lincRNA"
846