如何将两个 gz 文件合并到具有特定名称的新输出文件中

如何将两个 gz 文件合并到具有特定名称的新输出文件中

我有来自 24 个样本的 96 个 *fastqc.gz 原始读取文件。每个样品在每对的两个泳道上进行测序。

我想将两个通道中每一对的读取合并到一个输出文件中,该输出文件具有与示例文件名 (2271_merged_R1_001.fastq.gz) 相同的名称标识符。

File names are in this order:
22[71-94]*R[1-2]_001.fastq.gz;

**2271**_ID890_1_S1_L001_**R1_001.fastq.gz**
**2271**_ID890_1_S1_L002_**R1_001.fastq.gz**

**2271**_ID890_1_S1_L001_**R2_001.fastq.gz**
**2271**_ID890_1_S1_L002_**R2_001.fastq.gz**

我尝试了以下简短脚本,但只生成了两个输出文件(第一个和最后一个)。

对于 R1 文件

  for rf in 22[71-94]*R1_001.fastq.gz; do zcat $rf > 22"${71-94}"_merged_R1_001.fastq.gz ; done

对于 R2 文件

for rf in 22[71-94]*R2_001.fastq.gz; do zcat $rf > 22"${71-94}"_merged_R2_001.fastq.gz ; done

我的问题是: 1. 为什么只生成两个输出文件? 2. 输出文件的读取次数不是两个通道合并文件的总和。 3. 有没有一种好的方法,我可以单步合并两个通道(R1 和 R2)的读取,而不是为每种读取类型运行两次。

代码出了什么问题?我如何验证输出文件是否完全合并?

谢谢

答案1

首先,22[71-94]*R1_001.fastq.gz没有扩展到你认为它扩展到的范围

这是有效的22[1-9]*R1_001.fastq.gz- 在此,[71-94] 是一个字符分组,其中“7 OR 1 to 9 OR 4”简化为“1 to 9”。

22{71..94}*R1_001.fastq.gz很可能是您正在寻找的扩展,但是您的循环将为zcat找到的每个文件执行一次,而不是将它们连接在一起。实际上,每个R1文件都按顺序被zcat写入同一个输出文件中,覆盖以前的写入。

我相信这就是您在给定假设的情况下实际寻找的内容(见下文):

for num in {71..94}; do zcat 22"$num"*R1_{L001,L002}.fastq.gz > "22${num}_merged_R1_001.fastq" ; done

假设:您希望解压缩结果,因此我.gz从结果文件中删除了(正如帕特里克所指出的)
如果不是这种情况,只需更改zcatcat并再次附加.gz到结果文件即可。

相关内容