2017-03-29 6 views
1

2つの入力ファイルを必要とするコマンドでforループを使いたいとします。 2つのファイルの間に1文字の変更があります。ここでは、2つのサンプルファイルは、以下のとおりです。ここで2つの入力ファイルを持つループの場合

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 

ループがFILE2を見つけるために、FILE1の順列を使用していますので、問題は最も可能性の高いベース名を操作することにあります。ベースネームをファイル名全体よりも短くするにはどうしたらいいですか?私はループ以下のコメントに

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 

答えて

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 
+1

おかげで、これは素晴らしい作品。私は今、これらのファイルの命名に問題があります。 –

+0

解決済み:$ f1に変更するだけです。ご協力ありがとうございました –

関連する問題