Lancer Salmon avec un fichier regroupant les R1 et R2

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?
:wink:

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é.