【问题标题】:Bash For Loop for RNAseq Alignment用于 RNAseq 比对的 Bash For Loop
【发布时间】:2020-09-04 02:38:58
【问题描述】:

我的头脑根本不适用于 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。提前谢谢你。

【问题讨论】:

    标签: bash alignment sequence rna-seq


    【解决方案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
    

    如果您的文件已按照https://www.biostars.org/p/243683/ 进行 gzip 压缩(如您的示例中所示),您可能还需要添加 --readFilesCommand gunzip -c

    在这里进一步解释这个 c 风格的 for 循环:https://linuxize.com/post/bash-for-loop/#the-c-style-bash-for-loop

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

    【讨论】:

    • 嗨。我编写了一个小型 bash 库,以便更轻松地完成一些类似的事情。结帐github.com/koriege/bashbone 特别是alignment::star 函数。
    • 嗨@jared_mamrot 非常感谢!我想我意识到我可能还需要一个循环来创建适当的 ${sample} 名称,因为我的样本只有 SE-QS- 部分共有,然后用样本编号标记,这里是 19 和 20,然后每个都有自己的相应的对 R1 和 R2。或者您的代码是否说明了这一点?
    • 如果您将"${sample}" 带入循环,它应该可以解决问题 - 我已更新我的答案以使用 _R1 / _R2 之前的所有内容作为示例 ID(例如,SE-QS-19-FC01_S33_R1_001.fastq.gz 变为 SE-QS-19-FC01_S33) .这是你想要做的吗?
    猜你喜欢
    • 2011-04-30
    • 1970-01-01
    • 1970-01-01
    • 2020-04-28
    • 2016-11-17
    • 1970-01-01
    • 1970-01-01
    • 2013-01-12
    • 1970-01-01
    相关资源
    最近更新 更多