Journée de formation à l'utilisation du cluster
Journée de formation à l'utilisation du cluster
Journée de formation à l'utilisation du cluster
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Journée <strong>de</strong> <strong>formation</strong> à <strong>l'utilisation</strong><br />
<strong>du</strong> <strong>cluster</strong>
Pré-requis : Linux<br />
●<br />
La connexion à la plateforme<br />
●<br />
Les comman<strong>de</strong>s UNIX <strong>de</strong> base<br />
●<br />
La manipulation <strong>de</strong> fichiers<br />
●<br />
Le transfert <strong>de</strong> fichiers<br />
●<br />
Les scripts<br />
Aujourd'hui<br />
●<br />
Apprendre à calculer vite !<br />
➔<br />
Utilisation <strong>du</strong> <strong>cluster</strong> <strong>de</strong> calcul<br />
24/09/13 2
Objectifs<br />
●<br />
Exploiter au mieux les moyens <strong>de</strong> calculs<br />
➔<br />
Savoir lancer <strong>de</strong>s traitements (choix <strong>de</strong> la file<br />
d'attente, ...)<br />
➔<br />
Savoir organiser ses données (découpage <strong>de</strong>s<br />
fichiers, ...)<br />
●<br />
Suivre le déroulement <strong>de</strong>s traitements<br />
●<br />
Autonomie et maîtrise<br />
24/09/13 3
Planning <strong>de</strong> la journée<br />
Partie I : 09h00 - 12h30<br />
L'environnement <strong>de</strong> calcul<br />
Utilisation <strong>de</strong> SGE<br />
Partie II : 14h00 - 17h00<br />
Lancement <strong>de</strong> lots <strong>de</strong> traitements<br />
24/09/13 4
Connexion à l'infrastructure<br />
<strong>cluster</strong> <strong>de</strong> calcul<br />
n01 :<br />
48xcoeurs<br />
n02 :<br />
48xcoeurs<br />
ssh<br />
n03 :<br />
48xcoeurs<br />
Internet<br />
Serveur frontal<br />
«genotoul»<br />
n34 :<br />
48xcoeurs<br />
Disques<br />
24/09/13 5
Connexion à l'infrastructure<br />
●<br />
Avoir un compte, disponible sur <strong>de</strong>man<strong>de</strong> à l'adresse<br />
http://bioinfo.genotoul.fr<br />
●<br />
Connexion au serveur frontal <strong>de</strong> la plate-forme accessible via<br />
le protocole SSH à l'adresse genotoul.toulouse.inra.fr.<br />
➔<br />
➔<br />
Client SSH sur votre poste <strong>de</strong> travail distant (Putty).<br />
Session en mo<strong>de</strong> terminal pour entrer les comman<strong>de</strong>s,<br />
copier et/ou récupérer <strong>de</strong>s fichiers<br />
24/09/13 6
Le serveur frontal «genotoul»<br />
Serveur frontal<br />
«genotoul»<br />
24/09/13 7
Le serveur frontal «genotoul»<br />
●<br />
Serveur 24 cœurs avec 96 Go <strong>de</strong> mémoire vive<br />
●<br />
Linux 64 bits basé sur la distribution Red Hat<br />
●<br />
Multi utilisateurs et multi tâches<br />
●<br />
Sécurisé (SSH, gar<strong>de</strong> barrière), sauvegardé quotidiennement<br />
et maintenu<br />
●<br />
Les missions <strong>du</strong> serveur frontal :<br />
➔<br />
Mettre à disposition un environnement <strong>de</strong> développement<br />
➔<br />
Exécuter les programmes sur le système <strong>de</strong> calcul<br />
➔<br />
Contrôler le déroulement <strong>de</strong> l'exécution <strong>de</strong>s programmes<br />
➔<br />
Récupérer le résultat <strong>de</strong> l'exécution <strong>de</strong>s programmes<br />
24/09/13 8
Le serveur frontal «genotoul»<br />
●<br />
Environnement adapté à la bio-informatique<br />
➔<br />
Des logiciels dans le répertoire : /usr/local/bioinfo/bin/<br />
(ex: blastall, clustalw, iprscan, megablast, wu-blast, ...)<br />
➔<br />
Des banques <strong>de</strong> données dans le répertoire : /bank<br />
●<br />
Des langages informatiques<br />
➔<br />
Shell, perl, C, C++, java, ...<br />
●<br />
Des outils <strong>de</strong> programmation<br />
➔<br />
Nedit, nano, emacs, vi, ...<br />
24/09/13 9
Accès au <strong>cluster</strong> <strong>de</strong> calcul<br />
●<br />
Accès en mo<strong>de</strong> « batch » pour la plupart <strong>de</strong>s travaux<br />
●<br />
Accès en mo<strong>de</strong> « intéractif » pour <strong>de</strong>s cas particuliers<br />
●<br />
la communication entre le serveur et le <strong>cluster</strong> <strong>de</strong> calcul<br />
est réalisée avec l'ordonnanceur SGE<br />
24/09/13 10
Le stockage <strong>de</strong>s données<br />
Disques<br />
24/09/13 11
Le stockage <strong>de</strong>s données<br />
/usr/local/bioinfo/<br />
applications <strong>de</strong> bioinformatiques<br />
/bank/<br />
banques <strong>de</strong> données génomiques<br />
/home/<br />
/work/<br />
/save/<br />
répertoires d'accueil <strong>de</strong>s utilisateurs<br />
(pour les fichiers <strong>de</strong> configuration)<br />
répertoire <strong>de</strong> travail temporaire<br />
(pour le <strong>cluster</strong> <strong>de</strong> calcul)<br />
répertoire <strong>de</strong> stockage <strong>de</strong>s données pérennes (pas<br />
d'écriture à partir <strong>du</strong> <strong>cluster</strong>)<br />
24/09/13 12
Les volumes disques <strong>du</strong> <strong>cluster</strong><br />
●<br />
●<br />
Les volumes disques <strong>du</strong> <strong>cluster</strong> sont i<strong>de</strong>ntiques à ceux <strong>du</strong> serveur<br />
genotoul.<br />
Depuis tous les nœuds <strong>du</strong> <strong>cluster</strong> on retrouve exactement le même<br />
environnement <strong>de</strong> travail (logiciel, banques <strong>de</strong> données, zones <strong>de</strong><br />
stockages) que <strong>de</strong>puis genotoul.<br />
●<br />
Intérêts :<br />
➔ après la mise au point sur le serveur le logiciel n'a pas besoin<br />
d'être à nouveau paramétré<br />
➔ portable<br />
➔ la récupération <strong>de</strong>s résultats <strong>du</strong> calcul est simplifiée<br />
➔ le contrôle <strong>de</strong>s résultats pendant le calcul est possible<br />
24/09/13 13
Le système <strong>de</strong> calcul : le <strong>cluster</strong><br />
Système <strong>de</strong> calcul<br />
n01 : 8xcoeurs<br />
48xcoeurs<br />
n02 :<br />
48xcoeurs<br />
n03 :<br />
48xcoeurs<br />
n34 :<br />
48xcoeurs<br />
24/09/13 14
Le système <strong>de</strong> calcul : le <strong>cluster</strong><br />
●<br />
●<br />
●<br />
●<br />
34 nœuds<br />
34*48 = 1632 cœurs <strong>de</strong> calcul<br />
384Go <strong>de</strong> RAM par noeud (8 Go par coeur)<br />
Linux Red Hat 64 bits<br />
●<br />
Désignation :<br />
➔ ceri001, ceri002, ....., ceri034<br />
24/09/13 15
Planning <strong>de</strong> la journée<br />
Partie I : 09h00 - 12h30<br />
L'environnement <strong>de</strong> calcul<br />
Utilisation <strong>de</strong> SGE<br />
Partie II : 14h00 - 17h00<br />
Lancement <strong>de</strong> lots <strong>de</strong> traitements<br />
24/09/13 16
SGE (Sun Grid Engine)<br />
●<br />
Ordonnanceur<br />
« L'ordonnancement <strong>de</strong> tâches informatiques concerne exclusivement<br />
la manière <strong>de</strong> lancer <strong>de</strong>s traitements (batchs) sur un ou plusieurs<br />
composants <strong>de</strong> son système d'in<strong>formation</strong> au moyen <strong>de</strong> progiciels<br />
spécifiques. ... » (Wikipedia)<br />
➔<br />
➔<br />
➔<br />
➔<br />
Enchaînement successif <strong>de</strong>s traitements<br />
Application <strong>de</strong> règles d'exécution<br />
Soumission dans une file d'attente<br />
Pas <strong>de</strong> garantie <strong>de</strong> date d'exécution<br />
24/09/13 17
Stratégie d'ordonnancement : Fair Share<br />
●<br />
Distribution équitable entre utilisateurs <strong>du</strong> temps d'utilisation<br />
CPU<br />
➔ 4 utilisateurs A,B,C,D exécutent une tâche :<br />
➔<br />
L'utilisateur D lance une nouvelle tâche :<br />
A<br />
B C<br />
D D<br />
12,5% 12,5%<br />
25% 25% 25% 25%<br />
Et non pas :<br />
A<br />
B<br />
C<br />
D<br />
20% 20% 20% 20%<br />
20%<br />
24/09/13 18
Contraintes/limitations <strong>de</strong> soumission<br />
●<br />
Chaque job est executé :<br />
➔<br />
Sur 1 cœur <strong>de</strong> calcul<br />
➔<br />
Avec 8 Go <strong>de</strong> RAM<br />
➔<br />
Sur une file d'attente<br />
●<br />
Les files disponibles :<br />
N om d e la file<br />
w orkq (d éfa ut)<br />
unlim itq<br />
hypermemq<br />
P riorité Tem ps m a xim um<br />
300 48h<br />
100 illimité<br />
0 illimité<br />
➔<br />
Ne pas (trop) surestimer les ressources nécessaires à<br />
l’exécution <strong>de</strong> ses travaux, afin <strong>de</strong> tirer le meilleur<br />
parti <strong>du</strong> système<br />
24/09/13 19
Soumission <strong>de</strong> jobs : qsub<br />
Retourne le job ID -><br />
2 fichiers créés -><br />
- sortie standard<br />
- sortie d'erreur<br />
[user@snp ~/work]$ qsub mon_script.sh<br />
Your job 15660<br />
("mon_script.sh") has been submitted<br />
[user@snp ~/work]$ ls<br />
mon_script.sh mon_script.sh.e15660 mon_script.sh.o15660<br />
24/09/13 20
Soumission <strong>de</strong> jobs : qsub (options)<br />
●<br />
●<br />
●<br />
●<br />
●<br />
●<br />
●<br />
●<br />
-N job_name : pour donner un nom à son job<br />
-l mem=8G: pour <strong>de</strong>man<strong>de</strong>r 8Go <strong>de</strong> mémoire<br />
-l h_vmem=10G : pour fixer la taille max à 10Go<br />
-q queue_name : spécifier le nom <strong>de</strong> la file<br />
-o output_filename : redirection <strong>de</strong> la sortie standard<br />
-e error_filename : redirection <strong>de</strong> la sortie d'erreur<br />
-M mon_adresse@mail : votre @email<br />
-m bae : option d'envoi <strong>du</strong> mail (b : begin, a : abort, e : end)<br />
➔<br />
qsub -q <strong>formation</strong>q mon_script.sh<br />
24/09/13 21
Soumission <strong>de</strong> jobs : qsub (options)<br />
●<br />
Le classique ...<br />
[user@snp ~/work]$ qsub -q workq mon_script.sh<br />
Your job 15660<br />
("mon_script.sh") has been submitted<br />
➔<br />
➔<br />
8Go <strong>de</strong> RAM<br />
1 coeur<br />
24/09/13 22
Soumission <strong>de</strong> jobs : qsub (options)<br />
●<br />
Besoin <strong>de</strong> plus <strong>de</strong> Mémoire ...<br />
[user@snp ~/work]$ qsub -q workq -l h_vmem=36G -l mem=32G<br />
mon_script.sh<br />
Your job 15660<br />
("mon_script.sh") has been submitted<br />
➔<br />
➔<br />
32/36Go <strong>de</strong> RAM<br />
1 cœur<br />
24/09/13 23
Soumission <strong>de</strong> jobs : qsub (options)<br />
●<br />
Besoin <strong>de</strong> plus <strong>de</strong> coeurs …<br />
➔<br />
parallel_smp : X cœurs sur un même nœud<br />
➔ parallel_fill : X cœurs sur <strong>de</strong>s nœuds indifférents<br />
➔ parallel_rr : X cœurs sur <strong>de</strong>s nœuds forcément différents<br />
[user@snp ~/work]$ qsub -l h_vmem=6G -l mem=6G -pe parallel_smp 28<br />
mon_script.sh<br />
Your job 15660<br />
("mon_script.sh") has been submitted<br />
➔<br />
➔<br />
168 Go <strong>de</strong> RAM<br />
28 cœurs sur un seul noeud<br />
24/09/13 24
Soumission <strong>de</strong> jobs : qsub (options)<br />
●<br />
Toutes les options précé<strong>de</strong>mment décrites peuvent être intégrées<br />
directement dans le script soumis à SGE avec qsub<br />
(mon_script.sh)<br />
#!/bin/sh<br />
#$ -M user@toulouse.inra.fr<br />
#$ -m a<br />
#$ -q workq<br />
# Mon programme commence ici<br />
ls<br />
#Fin <strong>de</strong> mon programme<br />
●<br />
Sans passer par un script : l'option -b<br />
$ qsub -b y -cwd ls<br />
24/09/13 25
Soumission <strong>de</strong> jobs : qlogin (mo<strong>de</strong> interactif)<br />
L'utilisateur est<br />
connecté sur le noeud<br />
ceri002 -><br />
L'utilisateur est<br />
déconnecté -><br />
$ qlogin<br />
Your job 641468 ("QLOGIN") has been submitted<br />
waiting for interactive job to be sche<strong>du</strong>led ...<br />
Your interactive job 641468 has been successfully sche<strong>du</strong>led.<br />
Establishing /SGE/GE2011.11/inra/tools/qlogin_wrapper.sh<br />
session to host ceri002 ...<br />
Last login: Thu Aug 30 17:04:20 2012 from login<br />
[laborie@ceri002 ~]$<br />
[laborie@ceri002 ~]$ exit<br />
logout<br />
24/09/13 26
Contrôle <strong>de</strong>s jobs : qstat<br />
job-ID prior name user state submit/start at queue slots ja-task-ID<br />
-----------------------------------------------------------------------------------------------------------------<br />
job-ID : i<strong>de</strong>ntifiant unique <strong>du</strong> job assigné par l'ordonnanceur<br />
prior : la priorité <strong>du</strong> job déterminant sa position dans la queue. Sa valeur est<br />
déterminée dynamiquement<br />
name : le nom <strong>du</strong> job.<br />
user : le nom d'utilisateur <strong>du</strong> propriétaire <strong>du</strong> job.<br />
state : Etat <strong>du</strong> job (voir plus loin)<br />
submit/start at : la date et l'heure <strong>de</strong> soumission <strong>du</strong> job.<br />
queue : nom <strong>de</strong> la file sur laquelle le job est présent et le nom <strong>du</strong> noeud <strong>du</strong><br />
<strong>cluster</strong> (ressource <strong>de</strong> calcul) alloué à l'exécution <strong>de</strong> ce job.<br />
slots : nombre <strong>de</strong> slots utilisés par le job.<br />
ja-task-ID : i<strong>de</strong>ntifiant <strong>du</strong> job array (vi<strong>de</strong> dans le cas ou le job n'est pas un job<br />
array).<br />
24/09/13 27
Contrôle <strong>de</strong>s jobs : qstat<br />
state : l'état <strong>du</strong> job en abréviation :<br />
● d(eletion) : le job est en cours <strong>de</strong> suppression<br />
● E(rror) : le job n'a pu être exécuté<br />
● h(old) : le job est en attente d'exécution<br />
● r(unning) : le job est en exécution<br />
● t(ransfering) : le job est en cours <strong>de</strong> transfert<br />
● w(aiting) : le job est en attente d'exécution<br />
24/09/13 28
Contrôle <strong>de</strong>s jobs : qstat<br />
●<br />
qstat -u nom_utilisateur :<br />
donne uniquement les in<strong>formation</strong>s sur l'utilisateur<br />
●<br />
qstat -s r :<br />
donne uniquement les jobs avec le status r(unning)<br />
●<br />
man qstat :<br />
obtenir <strong>de</strong> l'ai<strong>de</strong> sur la comman<strong>de</strong><br />
[user@snp ~/work]$ qstat -s r -u user<br />
job-ID prior name user state submit/start at queue slots ja-task-ID<br />
----------------------------------------------------------------------------------------------------------------------------<br />
15555 0.56000 PLP4 user r 04/07/2009 16:39:41 longq@n01.<strong>cluster</strong> 1<br />
15556 0.56000 PLP5 user r 04/07/2009 16:39:41 longq@n01.<strong>cluster</strong> 1<br />
15558 0.56000 PLP7 user r 04/07/2009 16:39:41 longq@n01.<strong>cluster</strong> 1<br />
15559 0.56000 PLP8 user r 04/07/2009 16:39:41 longq@n02.<strong>cluster</strong> 1<br />
15560 0.56000 PLP9 user r 04/07/2009 16:39:41 longq@n02.<strong>cluster</strong> 1<br />
24/09/13 29
Contrôle <strong>de</strong>s jobs : qstat -j<br />
[user@snp ~/work]$ qstat -j 15555<br />
==============================================================<br />
job_number: 297383<br />
exec_file:<br />
job_scripts/297383<br />
submission_time: Thu Mar 4 16:38:34 2010<br />
owner:<br />
ng6<br />
uid: 1074<br />
group:<br />
NG6<br />
gid: 1006<br />
sge_o_home: /var/www<br />
...<br />
hard resource_list: h_stack=256M,arch=lx*, h_vmem=12G,memoire=12G,pri_wflow=1<br />
mail_list:<br />
ng6@bioinfo.<strong>cluster</strong><br />
notify:<br />
TRUE<br />
job_name:<br />
RunWorkflow<br />
priority: -20<br />
hard_queue_list: workq<br />
24/09/13 30
Contrôle <strong>de</strong>s jobs : qmon<br />
24/09/13 31
Modifier un job : qalter<br />
➔<br />
Condition : être propriétaire <strong>du</strong> job<br />
[user@snp ~/work]$ qstat -u user<br />
job-ID prior name user state submit/start at queue slots ja-task-ID<br />
----------------------------------------------------------------------------------------------------------------------------<br />
15833 0.56000 mon_script.sh user w 04/07/2009 16:39:41 workq@n01.<strong>cluster</strong> 1<br />
[user@snp ~/work]$ qalter -l mem=16G 15833<br />
Modified hard queue list of job 15833<br />
24/09/13 32
Supprimer un job : q<strong>de</strong>l<br />
➔<br />
Condition : être propriétaire <strong>du</strong> job<br />
[user@snp ~/work]$ qsub mon_script.sh<br />
Your job 15833 («mon_script.sh») has been submitted<br />
[user@snp ~/work]$ qstat -u user<br />
job-ID prior name user state submit/start at queue slots ja-task-ID<br />
----------------------------------------------------------------------------------------------------------------------------<br />
15833 0.56000 mon_script.sh user r 04/07/2009 16:39:41 workq@n01.<strong>cluster</strong> 1<br />
[user@snp ~/work]$ q<strong>de</strong>l 15833<br />
User has registered the job 15833 for <strong>de</strong>letion<br />
24/09/13 33
Tracer les jobs<br />
●<br />
Redirection <strong>de</strong>s sorties (erreur + standard) vers <strong>de</strong>s fichiers<br />
textes :<br />
#$ -o standard.txt<br />
#$ -e error.txt<br />
●<br />
Retour in<strong>formation</strong>s par email :<br />
#$ -M user@toulouse.inra.fr<br />
#$ -m bea<br />
b : envoie un mail au départ <strong>de</strong> l'exécution <strong>du</strong> job<br />
e : envoie un mail à la fin <strong>de</strong> l'exécution <strong>du</strong> job<br />
a : envoie un mail en cas d'erreur lors <strong>de</strong> l'exécution <strong>du</strong> job<br />
24/09/13 34
En résumé ...<br />
Système <strong>de</strong> calcul<br />
- tester (qlogin)<br />
- traiter (qsub)<br />
n01 :<br />
48xcoeurs<br />
n02 :<br />
48xcoeurs<br />
ssh<br />
n03 :<br />
48xcoeurs<br />
Internet<br />
Serveur frontal<br />
«genotoul»<br />
- login<br />
- développement (script)<br />
- suivi <strong>de</strong> jobs (qstat)<br />
Disques<br />
- /work pour l'écriture à partir <strong>du</strong> <strong>cluster</strong><br />
- /save pour les données pérennes<br />
n34 :<br />
48xcoeurs<br />
24/09/13 35<br />
➔<br />
L'environnement est conservé entre les différentes machines
Monitoring <strong>cluster</strong> genotoul<br />
24/09/13 36
Place à la pratique ...<br />
TP1<br />
24/09/13 37
Planning <strong>de</strong> la journée<br />
Partie I : 09h00 - 12h30<br />
L'environnement <strong>de</strong> calcul<br />
Utilisation <strong>de</strong> SGE<br />
Partie II : 14h00 - 17h00<br />
Lancement <strong>de</strong> lots <strong>de</strong> traitements<br />
24/09/13 38
Lancer <strong>de</strong>s lots <strong>de</strong> traitements<br />
●<br />
Concept : segmenter un job en plusieurs petits jobs atomiques<br />
●<br />
Intérêts :<br />
●<br />
➔ Améliorer le temps <strong>de</strong> traitement <strong>de</strong> façon très significative :<br />
le calcul est réalisé sur plusieurs cœurs <strong>de</strong> calcul<br />
➔<br />
Améliorer le temps <strong>de</strong> prise en charge par l'ordonnanceur<br />
Condition : le job doit être «sécable» en sous job<br />
24/09/13 39
Utilisation <strong>de</strong> blast sur le <strong>cluster</strong><br />
Fichier multi fasta<br />
mes_sequences.fa<br />
nt<br />
(banque <strong>de</strong> sequence<br />
nucléique <strong>de</strong> genbank)<br />
ma_comman<strong>de</strong>.sh<br />
blastall -p blastn -d nt -i mes_sequences.fa<br />
qsub ma_comman<strong>de</strong>.sh<br />
Execution sur un seul CPU <strong>du</strong> <strong>cluster</strong><br />
24/09/13 40
Segmentation <strong>du</strong> traitement <strong>de</strong> blast<br />
Fichier multi fasta<br />
mes_sequences.fa<br />
nt<br />
(banque <strong>de</strong> sequence<br />
nucléique <strong>de</strong> genbank)<br />
mes_sequences_1.fa<br />
mes_sequences_2.fa<br />
mes_sequences_3.fa<br />
ma_comman<strong>de</strong>1.sh<br />
blastall -p blastn -d nt -i mes_sequences_1.fa<br />
ma_comman<strong>de</strong>2.sh<br />
blastall -p blastn -d nt -i mes_sequences_2.fa<br />
ma_comman<strong>de</strong>3.sh<br />
blastall -p blastn -d nt -i mes_sequences_3.fa<br />
qsub ma_comman<strong>de</strong>_1.sh<br />
qsub ma_comman<strong>de</strong>_2.sh<br />
qsub ma_comman<strong>de</strong>_3.sh<br />
Exécution sur 3 CPUs<br />
<strong>du</strong> <strong>cluster</strong><br />
24/09/13 41
Segmentation <strong>du</strong> traitement <strong>de</strong> blast<br />
Fichier multi fasta<br />
mes_sequences.fa<br />
SplitMultifasta.pl -n 200 -o ./all_fasta/ –i extract.fasta<br />
mes_sequences_1.fa<br />
mes_sequences_2.fa<br />
mes_sequences_3.fa<br />
mes_comman<strong>de</strong>s.txt<br />
blastall -p blastn -i mes_sequences_1.fa -d refseq_rna -o 1.blast<br />
blastall -p blastn -i mes_sequences_2.fa -d refseq_rna -o 2.blast<br />
blastall -p blastn -i mes_sequences_3.fa -d refseq_rna -o 3.blast<br />
qarray mes_comman<strong>de</strong>s.txt<br />
Exécution sur 3 CPUs <strong>du</strong> <strong>cluster</strong><br />
24/09/13 42
qarray :<br />
●<br />
qarray = qsub pour n lignes<br />
➔ Ex fichier d'entrée :<br />
fasta_to_fastq.pl –fasta sequence1.fasta –qual sequence1.qual<br />
fasta_to_fastq.pl –fasta sequence2.fasta –qual sequence2.qual<br />
fasta_to_fastq.pl –fasta sequence3.fasta –qual sequence3.qual<br />
➔ Ex comman<strong>de</strong> :<br />
qarray mon_fichier.txt<br />
24/09/13 43
Créer mes_comman<strong>de</strong>s.txt<br />
Dans quel shell suis-je <br />
echo $SHELL<br />
sh<br />
rm mes_comman<strong>de</strong>s.txt<br />
for f in `ls all_fasta/*.fasta`<br />
>do<br />
>echo blastall -p blastn -i $f -d refseq_rna -o $f.blast >> mes_comman<strong>de</strong>s.txt<br />
>done<br />
tcsh<br />
rm mes_comman<strong>de</strong>s.txt<br />
foreach f (`ls all_fasta/*.fasta`)<br />
foreach echo blastall -p blastn -i $f -d refseq_rna -o $f.blast >> mes_comman<strong>de</strong>s.txt<br />
foreach end<br />
Attention ! Penser a supprimer le fichier mes_comman<strong>de</strong>s , car le >> ajoute en fin <strong>de</strong><br />
fichier.<br />
24/09/13 44
Place à la pratique ...<br />
TP2<br />
24/09/13 45