Lou*_*u_A 2 shell bash shell-script filenames
我在名为 Data 的文件夹中有 25 对相关文件。这些文件被命名为tcr1_r1.txt和tcr1_r2.txt、\xe2\x80\x82tcr2_r1.txt和tcr2_r2.txt,依此类推,直到 I\xc2\xa0reach tcr25\xe2\x80\xa6(或我有多少个文件对)。我的问题是我需要将它们配对并在批处理文件中的每对上运行命令。例子:
\n命令 tcr1_r1.txt tcr2_r2.txt\n命令 tcr2_r1.txt tcr2_r2.txt\n\n\n
我怎样才能做到这一点?我正在考虑一个循环,但我似乎无法分离和交替每个命令上的文件。我尝试了一个嵌套循环,但它只是运行每个“r1”文件和所有“r2”文件。
\n\nfor filename1 in /Data/*_r1.txt\ndo\n for filename2 in /Data/*_r2.txt\n do\n echo "$filename1 and $filename2"\n done\ndone\nRun Code Online (Sandbox Code Playgroud)\n\n我尝试使用Jeff Schaller\xe2\x80\x99s 答案.\xc2\xa0\n以下是我\xc2\xa0 尝试过的确切 shell 文件行:
\n\nfor filename1 in /Data/*_r1.txt\ndo\n for filename2 in /Data/*_r2.txt\n do\n echo "$filename1 and $filename2"\n done\ndone\nRun Code Online (Sandbox Code Playgroud)\n\n我\xc2\xa0一定是丢失了一些东西。\xc2\xa0\n我\xe2\x80\x99m\xc2\xa0收到\xc2\xa0“Bad\xc2\xa0substitution”错误消息。
\n两种方式,取决于你是否要关心文件总数。
在第一种方式中,您知道文件数量为 25(具体命名为 1 到 25):
for index in {1..25}
do
command tcr"${index}"_r1.txt tcr"${index}"_r2.txt
done
Run Code Online (Sandbox Code Playgroud)
上面,(bash) shell 将 展开{1..25}为完整的数字集;然后我们将这些数字替换到配对文件名中的适当位置。
第二种方式,你不知道也不关心有多少个文件:
for first in tcr*_r1.txt
do
command "$first" "${first/_r1.txt/_r2.txt}"
done
Run Code Online (Sandbox Code Playgroud)
上面,我们循环遍历所有“r1”文件,并用“_r1.txt”部分替换成对的“_r2.txt”。