Bash For Loops用于RNAseq比对

问题描述

我的头脑根本无法处理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

希望这会有所帮助-有多种方法可以解决此问题-如果您需要更多帮助,请在问题中添加更多详细信息,例如包括您使用的无效代码。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...