问题描述
我的头脑根本无法处理for循环,因此将不胜感激任何帮助。
背景:我正在尝试分析一些RNAseq数据,并且需要编写一个for循环以通过STAR读取我的所有双端fastq文件。
这是我现在拥有的代码:
#! /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循环,以便可以在STAR命令中使用fq1和fq2。预先谢谢你。
解决方法
在使用数组之前,我已经遍历了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
如果每个https://www.biostars.org/p/243683/压缩文件(如您的示例一样),则您可能还想添加--readFilesCommand gunzip -c
。
此c样式for循环的进一步说明:https://linuxize.com/post/bash-for-loop/#the-c-style-bash-for-loop
希望这会有所帮助-有多种方法可以解决此问题-如果您需要更多帮助,请在问题中添加更多详细信息,例如包括您使用的无效代码。