【问题标题】:Writing a bash or python for loop with paired input files and multiple output files使用成对的输入文件和多个输出文件编写 bash 或 python for 循环
【发布时间】:2023-04-06 04:38:01
【问题描述】:

我正在研究用于分析 RNA-seq 数据的一组非常常见的命令。但是,由于这个问题不是针对生物信息学的,所以我选择在这里发帖而不是 BioStars 等。

具体来说,我正在从配对末端测序数据中修剪 Illumina Truseq 适配器。为此,我使用 Trimmomatic 0.36。

我有两个输入文件:

S6D10MajUnt1-1217_S12_R1_001.fastq.gz
S6D10MajUnt1-1217_S12_R2_001.fastq.gz

该命令生成五个输出文件:

S6D10MajUnt1-1217_S12_R1_001.paired.fq.gz
S6D10MajUnt1-1217_S12_R1_001.unpaired.fq.gz
S6D10MajUnt1-1217_S12_R2_001.paired.fq.gz
S6D10MajUnt1-1217_S12_R2_001.unpaired.fq.gz
S6D10MajUnt1-1217_S12.trimlog

我正在尝试编写一个 python 或 bash 脚本来递归循环一个文件夹的所有内容,并使用适当的文件和输出执行 trim 命令。

#!/bin/bash
for DR in *.fastq.gz
do
FL1=$(ls ~/home/path/to/files/${DR}*_R1_*.fastq.gz)
FL2=$(ls ~/home/path/to/files/${DR}*_R2_*.fastq.gz)
java -jar ~/data2/RJG_Seq/apps/Trimmomatic-0.36/trimmomatic-0.36.jar PE -threads 12 -phred33 -trimlog ~/data2/RJG_Seq/trimming/sample_folder/$FL1.trimlog ~/data2/RJG_Seq/demultiplexing/sample_folder/$FL1 ~/data2/RJG_Seq/demultiplexing/sample_folder/$FL2 ~/data2/RJG_Seq/trimming/sample_folder/$FL1.pair.fq.gz ~/data2/RJG_Seq/trimming/sample_folder/$FL1.unpair.fq.gz ~/data2/RJG_Seq/trimming/sample_folder/$FL2.pair.fq.gz ~/data2/RJG_Seq/trimming/sample_folder/$FL2.unpair.fq.gz ILLUMINACLIP:/media/RJG_Seq/apps/Trimmomatic-0.36/TruSeq3-PE.fa:2:30:10 LEADING:5 TRAILING:5 SLIDINGWINDOW:4:15 MINLEN:28
done

我认为我分配和调用 FL1 和 FL2 的方式有问题,最终我正在寻求帮助来创建可执行命令 trim-my-reads.py 或 trim-my-reads.sh修改为接受任意命名的输入 R1.fastq.gz 和 R2.fastq.gz 文件。

【问题讨论】:

  • 这真的是 Python 吗?
  • 它不是 bash(或 ksh)脚本,因为分配中的 = 周围有空格。也许这就是问题所在,而您“只是”弄错了语言?在大多数 shell 中,= 周围不允许有空格。
  • 当然,它可能是一个 bash for 循环,它希望它是一个 python for 循环。据我了解,bash 无法在不使用 C 的情况下处理多个输入文件。
  • Bash 可以使用exec(文件描述符版本,而不是“替换程序”版本)处理多个输入文件。见stackoverflow.com/questions/18351198/…。但我认为这不是问题所在。
  • 当您在循环主体的任何位置不使用文件名 ($i) 时,为什么还要循环这些 *.fastq.gz 文件名?

标签:
python
bash
for-loop