在 bash shell 中循环访问两组文件

Lou*_*u_A 2 shell bash shell-script filenames

我在名为 Data 的文件夹中有 25 对相关文件。这些文件被命名为tcr1_r1.txttcr1_r2.txt、\xe2\x80\x82tcr2_r1.txttcr2_r2.txt,依此类推,直到 I\xc2\xa0reach tcr25\xe2\x80\xa6(或我有多少个文件对)。我的问题是我需要将它们配对并在批处理文件中的每对上运行命令。例子:

\n\n

\n命令  tcr1_r1.txt tcr2_r2.txt\n命令  tcr2_r1.txt tcr2_r2.txt\n

\n\n

我怎样才能做到这一点?我正在考虑一个循环,但我似乎无法分离和交替每个命令上的文件。我尝试了一个嵌套循环,但它只是运行每个“r1”文件和所有“r2”文件。

\n\n
for filename1 in /Data/*_r1.txt\ndo\n  for filename2 in /Data/*_r2.txt\n  do\n     echo "$filename1 and $filename2"\n  done\ndone\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

我尝试使用Jeff Schaller\xe2\x80\x99s 答案.\xc2\xa0\n以下是我\xc2\xa0 尝试过的确切 shell 文件行:

\n\n
for filename1 in /Data/*_r1.txt\ndo\n  for filename2 in /Data/*_r2.txt\n  do\n     echo "$filename1 and $filename2"\n  done\ndone\n
Run Code Online (Sandbox Code Playgroud)\n\n

我\xc2\xa0一定是丢失了一些东西。\xc2\xa0\n我\xe2\x80\x99m\xc2\xa0收到\xc2\xa0“Bad\xc2\xa0substitution”错误消息。

\n

Jef*_*ler 5

两种方式,取决于你是否要关心文件总数。

在第一种方式中,您知道文件数量为 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”。