如何遍历多个文件夹以连接 FastQ 文件?

How to loop over multiple folders to concatenate FastQ files?

我从 Illumina Sequencing 收到了 100 个样本的多个 fastq.gz 文件。但是根据样本 ID,各个样本的所有 fastq.gz 文件都位于单独的文件夹中。此外,对于一个示例,我有多个 (8-16) R1.fastq.gzR2.fastq.gz 文件。因此,我使用以下代码将所有 R1.fastq.gzR2.fastq.gz 连接成一个 R1.fastq.gzR2.fastq.gz.

cat V350043117_L04_some_digits-525_1.fq.gz V350043117_L04_some_digits-525_1.fq.gz V350043117_L04_some_digits-525_1.fq.gz > sample_R1.fq.gz

所以在排序文件中,代码中的结构如上。对于每个样本,带有 V 的字符串具有不同的数字,然后 L 具有不同的数字,然后是 _1_2 之前的另一串数字。对于每个样本,数字都在不断变化。 我的问题是,如何创建一个循环,一次遍历所有文件夹,同时考虑序列文件的不同文件编号,以连接多个 fq.gz 文件并将它们组合成一个 R1 和 R2 文件? 当然,我不能通过进入每个示例文件夹来一个接一个地连接起来。

请提供一些有用的提示。谢谢。
文件夹结构如下:

/data/Sample_1/....._525_1_fq.gz    /....._525_2_fq.gz    /....._526_1_fq.gz        /....._526_2_fq.gz
/data/Sample_2/....._580_1_fq.gz    /....._580_2_fq.gz    /....._589_1_fq.gz        /....._589_2_fq.gz
/data/Sample_3/....._690_1_fq.gz    /....._690_2_fq.gz    /....._645_1_fq.gz        /....._645_2_fq.gz

下面我附上了文件夹结构的截图。

Folder structure

根据提供的文件结构,请试一试:

#!/bin/bash

for d in Raw2/C*/; do
(
    cd "$d"
    id=${d%/}; id=${id##*/}             # extract ID from the directory name
    cat V*_1.fq.gz > "${id}_R1.fq.gz"
    cat V*_2.fq.gz > "${id}_R2.fq.gz"
)
done
  • 语法 for d in Raw2/C*/ 遍历以 C 开头的子目录。
  • 括号使内部命令在子 shell 中执行,因此我们不必关心从 cd "$d" 返回(以少量额外执行时间为代价)。
  • 变量id赋值给从目录名中提取的ID。
  • 例如
  • cat V*_1.fq.gz,会根据目录下的文件展开为V350028825_L04_581_1.fq.gz V350028825_L04_582_1.fq.gzV350028825_L04_583_1.fq.gz...,拼接成${id}_R1.fastq.gz${id}_R2.fastq.gz.
  • 相同