我希望对需要两个输入文件的命令使用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
答案 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