But : Dans un fichier organisé en colonne, extraire la (ou les) colonne(s) qui nous intéressent
Prérequis : Savoir utiliser grep est un plus.
Difficulté : 1/5 (Facile)
Nous souhaitons dans le fichier PDB 6CSC extraire la première et la quatrième colonne des lignes débutant par le mot clef "ATOM"
Préparation des données :
La première chose à faire est d'extraire les lignes contenant avec mot clef "ATOM", pour cela nous allons utiliser grep. L'utilisation la plus simple de cet utilitaire demande deux arguments qui sont la chaîne recherchée et le fichier à fouiller.
1 |
[bioinfouser@machine ~] grep "ATOM " 6CSC.pdb |
Le lecteur attentif aura remarqué que des guillemets sont présents et qu'un espace a été rajouté. Les deux sont liés, lorsque nous filtrons sur le mot clef seul, grep nous renvoient des ligne de commentaires contenant le mot ATOMS que nous ne souhaitons pas. Les lignes qui nous intéressent contiennent le mot clef immédiatement suivit d'un espace et l'espace nous oblige à rajouter des guillemets. Une autre solution aurait pu être : grep ATOM 6CSC.pdb | grep ‑v ATOMS l'option "-v" permettant de sélectionner toutes les lignes qui ne contiennent pas le mot clef, le caractère | (dit pipe) il sera expliqué plus loin.
Voici un extrait du résultat des deux commandes :
1 2 3 4 5 |
ATOM 1 N ALA A 1 14.488 55.819 27.062 1.00 72.41 N ATOM 2 CA ALA A 1 15.437 54.922 26.440 1.00 59.15 C ATOM 3 C ALA A 1 16.446 54.207 27.395 1.00 52.01 C ATOM 4 O ALA A 1 16.736 53.004 27.244 1.00 49.97 O ATOM 5 CB ALA A 1 16.115 55.672 25.296 1.00 56.58 C |
Commande : Awk
Nous allons maintenant passer à la sélection de la première et quatrième colonne. Nous allons utiliser l'utilitaire awk dans son usage le plus basique, l'exemple ci-dessus ne nous permet pas d'utiliser la commande cut, j'en parlerai tout de même à la fin de l'article.
1 |
[bioinfouser@machine ~] grep "ATOM " 6CSC.pdb | awk ' { print $1, $4 } ' |
Le caractère "|" signifie pipe, il prend le résultat de la commande à sa gauche pour l'envoyer comme "fichier" d'entrée à la commande à sa droite. Tout étant fichier sous GNU/Linux, ceci est fait de manière transparente.
L'argument passé à awk, qui à son propre langage de programmation, est le suivant ' { print $1, $4 } '
- Ce que nous avons placé entre guillemet simple est le script qui va être exécuté, nous aurions aussi pu utiliser l'option ‑f filename et stocker le script dans un fichier.
- $1 et $4 sont respectivement le contenu des colonnes 1 et 4, par défaut awk utilise l'espace comme séparateur, qu'il y en ait un ou plusieurs, c'est la même chose.
- Les accolades délimitent ce qui est appelé un "bloc-programme" qui regroupe un ensemble de traitement à effectuer.
- La virgule permet lors de l'affichage, fait avec la fonction print, de séparer avec un espace la première et la quatrième colonne.
Quelques informations supplémentaires :
- $0 permet d'afficher la ligne entière
- L'option ‑F permet de définir le délimiteur, un exemple est présent à la fin de cet article
1 2 3 4 5 6 7 8 9 |
[bioinfouser@machine ~] grep "ATOM " 6CSC.pdb | awk ' { print $1" "$4 } ' ATOM ALA ATOM ALA ATOM ALA ATOM ALA ATOM ALA ATOM SER ATOM SER ... |
Commande : cut
Je souhaite maintenant faire la même chose avec l'utilitaire cut, celui ci n'a pas la plasticité d'awk et il est nécessaire que chaque colonne soit séparé par un seul et unique délimiteur. C'est pourquoi j'ai repris le résultat de la première commande grep et remplacé les espaces entres les différents termes par des ":" (format CSV pour les puristes). La manière de procéder au remplacement sera expliqué dans un prochain article.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
ATOM :1 :N :ALA :A :1 :14.488 :55.819 :27.062 :1.00 :72.41 :N : ATOM :2 :CA :ALA :A :1 :15.437 :54.922 :26.440 :1.00 :59.15 :C : ATOM :3 :C :ALA :A :1 :16.446 :54.207 :27.395 :1.00 :52.01 :C : ATOM :4 :O :ALA :A :1 :16.736 :53.004 :27.244 :1.00 :49.97 :O : ATOM :5 :CB :ALA :A :1 :16.115 :55.672 :25.296 :1.00 :56.58 :C [bioinfouser@machine ~] cut -d ":" -f 1,4 6CSC.csv ATOM :ALA ATOM :ALA ATOM :ALA ATOM :ALA ATOM :ALA |
Quelques explications : nous demandons à cut d'afficher les champs 1 et 4 (field option ‑f) délimité par le séparateur ";" (delimiter option ‑d).
Comme toujours , il est possible d'obtenir le même résultat de plusieurs façons :
1 2 3 4 5 6 7 |
[bioinfouser@machine ~] awk -F':' ' { print $1, $4 } ' 6CSC.csv ATOM ALA ATOM ALA ATOM ALA ATOM ALA ATOM ALA |
Liens
Laisser un commentaire