Цикл Bash For для выравнивания RNAseq

#bash #alignment #sequence #rna-seq

#bash #выравнивание #последовательность #rna-seq

Вопрос:

мой разум просто не работает с циклами for, поэтому любая помощь будет высоко оценена.

Справочная информация: я пробую свои силы в анализе некоторых данных RNAseq, и мне нужно написать цикл for, чтобы прочитать все мои парные файлы fastq через STAR.

Это код, который у меня есть прямо сейчас:

 #! /bin/bash

#PBS -l walltime=24:00:00
#PBS -l nodes=1:ppn=12
#PBS -l mem=48

# ENVIRONMENT
module load gcc/6.2.0
module load STAR/2.6.1d
prj=/gpfs/data/elf-lab/RNA_Seq/RNA_trial/sab_sandbox/

# INPUTS
sample=SE-QS-19-FC01_S*

staridx=${prj}/reference/hg38_gencode28_STAR

fq1=${prj}/data/${sample}.R1_001.fastq
fq2=${prj}/data/${sample}.R2_001.fastq

rgline="ID:${sample}    PU:${sample}    SM:${sample}    PL:ILLUMINA LB:${sample}"

# OUTPUTS
outprefix=${prj}/alignment/${sample}.

# COMMAND
STAR 
  --runThreadN 12 
  --genomeDir $staridx 
  --readFilesIn $fq1 $fq2 
  --outSAMtype BAM Unsorted 
  --outSAMunmapped Within 
  --outFileNamePrefix $outprefix 
  --outSAMattrRGline $rgline 
  --outSAMattributes NH HI AS nM NM 
  --quantMode GeneCounts
  

И вот как выглядят мои файлы:

 SE-QS-19-FC01_S33_R1_001.fastq.gz
SE-QS-19-FC01_S33_R2_001.fastq.gz
SE-QS-20-FC01_S34_R1_001.fastq.gz
SE-QS-20-FC01_S34_R2_001.fastq.gz

  

Я хочу написать цикл for, чтобы fq1 и fq2 были каждой парой для каждого чтения, но я не уверен, где именно разместить цикл for, чтобы fq1 и fq2 можно было использовать в команде STAR. Заранее благодарю вас.

Ответ №1:

Я перебрал файлы R1.fastq / R2.fastq перед использованием массивов, предполагая, что у вас есть равное количество файлов R1 / R2, например

 #! /bin/bash

#PBS -l walltime=24:00:00
#PBS -l nodes=1:ppn=12
#PBS -l mem=48

# ENVIRONMENT
module load gcc/6.2.0
module load STAR/2.6.1d
prj=/gpfs/data/elf-lab/RNA_Seq/RNA_trial/sab_sandbox/

staridx=${prj}/reference/hg38_gencode28_STAR

## Make arrays named fq1 and fq2 ##
fq1=(${prj}/data/*.R1_001.fastq)
fq2=(${prj}/data/*.R2_001.fastq)

# COMMAND
for ((i=0;i<"${#fq1[@]}";i  )); do
  sample="${fq1[$i]%%_R*}"
  rgline="ID:${sample}    PU:${sample}    SM:${sample}    PL:ILLUMINA LB:${sample}"
  outprefix=${prj}/alignment/"${sample}"

  STAR 
  --runThreadN 12 
  --genomeDir $staridx 
  --readFilesIn "${fq1[$i]}" "${fq2[$i]}" 
  --outSAMtype BAM Unsorted 
  --outSAMunmapped Within 
  --outFileNamePrefix $outprefix 
  --outSAMattrRGline $rgline 
  --outSAMattributes NH HI AS nM NM 
  --quantMode GeneCounts
done
  

Вы также можете захотеть добавить, --readFilesCommand gunzip -c если ваши файлы загружены в архив (как в вашем примере) наhttps://www.biostars.org/p/243683 /.

Дальнейшее объяснение этого цикла for в стиле c здесь:https://linuxize.com/post/bash-for-loop/#the-c-style-bash-for-loop

Надеюсь, это поможет — есть несколько способов решить эту проблему — если вам нужна дополнительная помощь, добавьте больше деталей в свой вопрос, например, включите код, который вы использовали, который не сработал.

Комментарии:

1. привет. Я написал небольшую библиотеку bash, чтобы упростить выполнение пары подобных вещей. проверка github.com/koriege/bashbone особенно alignment::star функция.

2. Привет @jared_mamrot большое тебе спасибо! Думаю, я понимаю, что мне также может понадобиться цикл для создания соответствующего ${sample} имени, поскольку мои образцы имеют только общую SE-QS- часть и затем помечаются номером образца, здесь 19 и 20, а затем у каждого есть соответствующие пары R1 и R2. Или ваш код учитывает это?

3. Если вы введете "${sample}" в цикл, это должно решить проблему — я обновил свой ответ, чтобы использовать все до _R1 / _R2 в качестве идентификатора образца (например, SE-QS-19-FC01_S33_R1_001.fastq.gz становится SE-QS-19-FC01_S33 ). Это то, что вы пытаетесь сделать?