#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
). Это то, что вы пытаетесь сделать?