使用 bash 如何遍历 txt 文件中的行并按顺序每两行配对

Using bash how to iterate through lines in a txt file and sequentially pair up every two lines

您好,我正在尝试使用 bash 遍历包含以下行的 .txt 文件。这是 fastq 文件完整列表的较小子集,但所有示例都遵循相同的模式。

/path/10-xxx-111-sample_S1_R1.fastq.gz
/path/10-xxx-111-sample_S1_R2.fastq.gz
/path/12-xxx-222-sample_S2_R1.fastq.gz
/path/12-xxx-222-sample_S2_R2.fastq.gz
/path/13-xxx-333-sample_S3_R1.fastq.gz
/path/13-xxx-333-sample_S3_R2.fastq.gz

目标是每两行配对并使用路径为 bash 中的进一步代码提供信息。

bwa mem ${index} ${r1} ${r2} -M -t 8 \
-R "@RG\tID:FlowCell.${name}\tSM:${name}\tPL:illumina\tLB:${Job}.${name}"   | \
samtools sort -O bam -o ${bam}/${name}_bwa_output.bam

第一个R1和R2应该分别对应${r1}和${r2},并且是有先后顺序的

${name} 包含在另一个文件中,由“10-xxx-111-sample_S1_”类型信息组成。

如果能在遍历此文本文件以通知下游代码方面提供任何帮助,我们将不胜感激。

预期输出:.txt 文件的前两行将通知下游代码。例如

bwa mem ${index} /path/10-xxx-111-sample_S1_R1.fastq.gz /path/10-xxx-111-sample_S1_R2.fastq.gz -M -t 8 \ 

在此之后,接下来的两行将通知下游代码等等。例如

bwa mem ${index} /path/12-xxx-222-sample_S2_R1.fastq.gz /path/12-xxx-222-sample_S2_R2.fastq.gz -M -t 8 \ 

为什么不一次读 2 行?当您对结果满意时,删除 bwa... 之前的 echo

$ cat myScript.sh
#!/usr/bin/env bash

while IFS= read -r r1 && IFS= read -r r2; do
  echo bwa mem "${index}" "$r1" "$r2" -M -t 8 ...
done < fastq_filepaths.txt
$ index=myIndex ./myScript.sh 
bwa mem myIndex /path/10-xxx-111-sample_S1_R1.fastq.gz /path/10-xxx-111-sample_S1_R2.fastq.gz -M -t 8 ...
bwa mem myIndex /path/12-xxx-222-sample_S2_R1.fastq.gz /path/12-xxx-222-sample_S2_R2.fastq.gz -M -t 8 ...
bwa mem myIndex /path/13-xxx-333-sample_S3_R1.fastq.gz /path/13-xxx-333-sample_S3_R2.fastq.gz -M -t 8 ...