![如何将两个 gz 文件合并到具有特定名称的新输出文件中](https://linux22.com/image/132177/%E5%A6%82%E4%BD%95%E5%B0%86%E4%B8%A4%E4%B8%AA%20gz%20%E6%96%87%E4%BB%B6%E5%90%88%E5%B9%B6%E5%88%B0%E5%85%B7%E6%9C%89%E7%89%B9%E5%AE%9A%E5%90%8D%E7%A7%B0%E7%9A%84%E6%96%B0%E8%BE%93%E5%87%BA%E6%96%87%E4%BB%B6%E4%B8%AD.png)
我有来自 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
从结果文件中删除了(正如帕特里克所指出的)
如果不是这种情况,只需更改zcat
为cat
并再次附加.gz
到结果文件即可。