For 循环用两个变量连接文件

For 循环用两个变量连接文件

总的来说,我对 Linux 比较陌生,希望有人能帮助我。

我想合并来自 4 个不同测序通道的 fastq.gz 文件。每个文件都有以下名称:GC082_F4.lane1.1901.R1.fastq.gz带有GC082_F4样品的名称,laneX指泳道(1至4),R1指正向或反向读取(“R1”是反向,“R2”是正向)。

我想将每个样本的 4 个不同通道的文件连接起来,并分别用于正向读取 (R1) 和反向读取 (R2)。因此,对于这个特定的示例,将是:

转发内容如下:

cat GC082_F4.lane1.1901.R1.fastq.gz \
  GC082_F4.lane2.1901.R1.fastq.gz GC082_F4.lane3.1901.R1.fastq.gz \
  GC082_F4.lane4.1901.R1.fastq.gz > GC082_F4.R1.fastq.gz

反过来读:

cat GC082_F4.lane1.1901.R2.fastq.gz \
  GC082_F4.lane2.1901.R2.fastq.gz GC082_F4.lane3.1901.R2.fastq.gz \
  GC082_F4.lane4.1901.R2.fastq.gz > GC082_F4.R2.fastq.gz

但由于我必须对 +100 个样本执行此操作,我想知道是否可以使用一个循环来实现此目的?

先感谢您!

答案1

只需识别文件的独特部分并对其进行分类:

cat GC082_F4.*.R1.fastq.gz > GC082_F4_R1.fastq.gz
cat GC082_F4.*.R2.fastq.gz > GC082_F4_R2.fastq.gz

因此,如果您有多个样本,您可以执行以下操作:

for sample in GC082_F4 GC083_F4 GC084_F4 GC085_F4 ... GC0NN_F4; do
    cat "$sample".*.R1.fastq.gz > "$sample"_R1.fastq.gz
    cat "$sample".*.R2.fastq.gz > "$sample"_R2.fastq.gz
done

您还可以提供示例名称列表作为输入:

while read sample; do
    cat "$sample".*.R1.fastq.gz > "$sample"_R1.fastq.gz
    cat "$sample".*.R2.fastq.gz > "$sample"_R2.fastq.gz
done < sample.names.txt

相关内容