对于包含两个输入文件的循环

时间:2017-03-29 18:20:56

标签: linux bash unix for-loop

我希望对需要两个输入文件的命令使用for循环。两个文件之间只有一个字符更改。这是两个示例文件:

Fay2_TCCGGAGA-CCTATCCT_L001_R1_001.fastq
Fay2_TCCGGAGA-CCTATCCT_L001_R2_001.fastq

这是我对命令的尝试:

for f in /directory/*R1*.fastq
 pref=${basename "$f" _*R1*.fastq}
command input1 $f input2 ${pref}_*R2*.fastq

问题很可能在于操纵基本名称,因此循环使用file1的排列来查找file2。如何使基本名称短于整个文件名。我收到了错误

Fay2_TCCGGAGA-CCTATCCT_L001_R2_001.fastq_*R2.fastq does not exist

感谢下面的评论,循环工作正常,但只要命令在新文件上循环,我的文件就会被覆盖。以下是我的整个命令,需要命名两个输出文件。

for f1 in /directory/*R1*.fastq
f2="${f1/_R1_/_R2_}"
 pref=${basename "$f" _*R1*.fastq}
command output1 ${pref}_trim_R1.fastq output2 ${pref}_trim_R2.fastq input1 $f input2 $f2

1 个答案:

答案 0 :(得分:1)

您可以遍历R1文件并使用大括号扩展来派生R2文件名:

for r1_file in /directory/*_R1_*.fastq; do
  r2_file="${r1_file/_R1_/_R2_}"
  command input1 "$r1_file" input2 "$r2_file"
done