Bonjour,
J’ai 70 .fastq R1 et 70 R2 . J’ai fait un fichier design.txt avec en colonne 1 la liste des R1 et en colonne 2 la liste des R2 et en colonne 3 un short name du sample. Grâce à ce fichier design je comptais faire tourner salmon pour chaque ligne du fichier design.txt en mettant pour -1 « colonne1 » , -2 « colonne2 » et -o « shortname de la colonne3 »_quant.
Mais je n’y arrive pas . Qq’un aurait une suggestion svp.
Bonjour,
Il y a surement moyen de faire avec une autre méthode mais je vous propose l'association d'array
Job et de awk
#!/bin/env bash
#SBATCH -p fast
#SBATCH --array=1-15
module load salmon/0.11.3
R1=$(awk 'NR==$SLURM_ARRAY_TASK_ID { print $1 }' design.txt)
R2=$(awk 'NR==$SLURM_ARRAY_TASK_ID { print $2 }' design.txt)
SHORTNAME=$(awk 'NR==$SLURM_ARRAY_TASK_ID { print $3 }' design.txt)
srun salmon -1 $R1 -2 $R2 -o $SHORTNAME
Notez que #SBATCH --array=1-15
est à adapter au nombre de ligne de votre fichier design.txt
Explication
awk 'NR==$SLURM_ARRAY_TASK_ID { print $1 }' design.txt
-
NR==
va cibler la Nième ligne de votre fichier design (NR = Number of Row). -
{ print $2 }
va récupérer la 2ème colonne - 'NR==10 { print $2 }' : dit if on est à la ligne 10, récupère la valeur à la colonne 2
-
$SLURM_ARRAY_TASK_ID
est une variable slurm qui va prendre dans notre cas les valeurs de 1 à 15 successivement. A chaque itération Slurm lance le script à ce delta près.
Si quelqu'un voit une autre solution, n'hésitez pas !
Merci
en fait c'est le array qui permet de faire comme une boucle for ou while de 1 à x avec x le nombre de ligne que j'ai dans mon fichier design?
C'est bien ça array+awk
a quel moment je mets le chemin où est mon fichier desing.txt? jamais et il faut que je run dans le dossier où il y a tous les fastq et le design.txt?
voici le message d'erreur que je retrouve dans mon slurm.out
slurmstepd: error: execve(): bad interpreter(/bin/bash #SBATCH -p fast #SBATCH --array=1-2 module load salmon/0.11.3 R1=$(awk 'NR==$SLURM_ARRAY_TASK_ID { print $2 }' design_test.txt) R2=$(awk 'NR==$SLURM_ARRAY_TASK_ID { print $3 }' design_test.txt) SHORTNAME=$(awk 'NR==$SLURM_ARRAY_TASK_ID { pri): No such file or directory
Vous pouvez/devez utiliser des chemins relatifs
R1=$(awk 'NR==$SLURM_ARRAY_TASK_ID { print $1 }' ../input/design.txt)
R2=$(awk 'NR==$SLURM_ARRAY_TASK_ID { print $2 }' ../input/design.txt)
SHORTNAME=$(awk 'NR==$SLURM_ARRAY_TASK_ID { print $3 }' ../input/design.txt)
srun salmon -1 ../input/fastq/$R1 -2 ../input/fastq/$R2 -o $SHORTNAME
Si vos fastq sont dans un dossier en amont input
puis dans un sous-dossier fastq
Si votre fichier design.txt est dans le dossier en amont input
Vous avez bien le #!
dans #!/bin/env bash
en haut de votre script ?
Bonjour l'autre possibilité consiterait a utiliser un script fournit dans la suite trinity
align_and_estimate_abundance.pl
ce script prend en entrée un fichier de transcript , un fichier de description
manuel : https://github.com/trinityrnaseq/trinityrnaseq/wiki/Trinity-Transcript-Quantification
exemple :
align_and_estimate_abundance.pl --transcripts transcript.fasta --seqType fq --samples_file sample.txt
--est_method salmon --prep_reference
ou sample.txt se presente comme suit
cond_A cond_A_rep1 A_rep1_left.fq A_rep1_right.fq
cond_A cond_A_rep2 A_rep2_left.fq A_rep2_right.fq
cond_B cond_B_rep1 B_rep1_left.fq B_rep1_right.fq
cond_B cond_B_rep2 B_rep2_left.fq B_rep2_right.fq
Erwan
Non effectivement je n'ai que #!/bin/bash
à quoi sert le env?
Cela permet de ne pas fixer le chemin du binaire. En utilisant env
, on rend le script plus adaptable à l'infra de calcul. C'est encore plus vrai pour #!/bin/env python
car python peut être installer à différent endroit suivant les distributions ou la manière dont à l'a installé.