Bashシェルで2つのファイルセットを繰り返します。

Bashシェルで2つのファイルセットを繰り返します。

Dataというフォルダに25個の関連ファイルのペアがあります。ファイル名は私が到達するまで(または私が持っているファイルのペアの数) 。 、およびなどでtcr1_r1.txt指定されます。私の問題は、それらをペアにリンクし、バッチファイルの各ペアに対してコマンドを実行する必要があることです。例:tcr1_r2.txttcr2_r1.txttcr2_r2.txttcr25…

注文する  tcr1_r1.txt tcr2_r2.txt
注文する  tcr2_r1.txt tcr2_r2.txt

どうすればいいですか?ループを考えていますが、各コマンドでファイルを分離して置き換えることはできないようです。入れ子になったループを試しましたが、各「r1」ファイルとすべての「r2」ファイルのみが実行されます。

for filename1 in /Data/*_r1.txt
do
  for filename2 in /Data/*_r2.txt
  do
     echo "$filename1 and $filename2"
  done
done

使ってみました。ジェフ・シャラーの答え。私が試した正確なシェルファイル行は次のとおりです。

#!/bin/bash

for first in /mnt/data/Sequencing_core/Data/Raw_data/062419_TCRB_Vanessa_Danielle/20190624_FS10000703_3_BPC29606-1232/Alignment_1/20190625_132145/Fastq/*R1_001.fastq.gz
do

  echo "$first"
  echo "${first/_R1_001.fastq.gz/_R2_001.fastq.gz}" 

done

私が何かを見逃しているようです。 「交換エラー」エラーメッセージが表示されます。

答え1

ファイルの総数に興味があるかどうかに応じて、2つの方法があります。

最初の方法では、ファイル数が25個(具体的には1〜25個)であることがわかります。

for index in {1..25}
do
  command tcr"${index}"_r1.txt tcr"${index}"_r2.txt
done

上記では、(bash)シェルは{1..25}完全な数値セットに展開されます。次に、その数をペアのファイル名の適切な場所に置き換えます。

2番目の方法は、ファイルがいくつあるかわからないか気にしないことです。

for first in tcr*_r1.txt
do 
  command "$first" "${first/_r1.txt/_r2.txt}"
done

上記では、すべての「r1」ファイルを繰り返し、「_r2.txt」ペアを「_r1.txt」部分に置き換えます。

答え2

ただ使えますxargs:

echo /Data/*_r[12].txt | xargs -n 2 the-command

関連情報