Bash 在具有多个输入的shell脚本文件夹中的文件上循环

Bash 在具有多个输入的shell脚本文件夹中的文件上循环,bash,loops,command-line,multiple-arguments,Bash,Loops,Command Line,Multiple Arguments,为命令行工具指定多个输入? 我是bash新手,希望在包含大量文件的文件夹上循环一个命令行程序 脚本接受两个输入文件(在我的例子中,它们在文件名的一个字段(“…R1”与“…R2”)中不同)。运行该工具的单个实例如下所示: tool_name infile1 infile2 -o outfile_suffix 实例: casper sample_name_R1_001.out.fastq sample_name_R2_001.out.fastq -o sample_name_merged 文件名

为命令行工具指定多个输入?

我是bash新手,希望在包含大量文件的文件夹上循环一个命令行程序

脚本接受两个输入文件(在我的例子中,它们在文件名的一个字段(“…R1”与“…R2”)中不同)。运行该工具的单个实例如下所示:

tool_name infile1 infile2 -o outfile_suffix
实例:

casper sample_name_R1_001.out.fastq sample_name_R2_001.out.fastq -o sample_name_merged
文件名格式:

DCP-137-5102-T1A3\U S33\U L001\U R1\U 001。fastq
DCP-137-5102-T1A3\U S33\U L001\U R2\U 001.fastq

粗体字段在不同的对(例如,2000、2110、5100等)之间会有所不同,每对以R1或R2区分

我想知道如何在包含多对匹配文件的文件夹上循环脚本,并确保输出(-o)具有“sample_name”后缀


我熟悉中文件的基本
。/*.*;do…$file…;done
,但这显然不适用于此示例。任何建议都将不胜感激!

您希望循环使用
R1
,并从中导出
R2
和合并文件名,例如:

for file1 in ./*R1*; do
    file2=${file1/R1/R2}
    merge=${file1#*R1}_merged
    casper ${file1} ${file2} -o ${merge}
done

注意:Markdown将
#*R1}\u合并后作为一条注释显示出来--不是

每对文件都包含R1和R2吗?你能给出一些文件名对的例子吗?是的,这对文件中的一个成员将有R1,另一个将有R2。我用更详细的描述更新了这篇文章。谢谢!这是一个很大的帮助。旁注:${file1}*R1}\u merge“从文件路径(包括示例名称)中删除“R1”前面的字符,而不是尾部字符。但是使用“${file1/R1*/}merged”解决了这个问题。@ColinAnthony没有问题。是的,这应该是
${file1%R1*}合并的
,但很高兴您解决了这个问题。