forループの分岐中にエラーが発生しましたか?

forループの分岐中にエラーが発生しましたか?

分岐シェルから2つの入力ファイルを受け取り、4つのファイルを出力するコードを実行しようとしています。以下は、forループ内で実行したい操作の例です。期待される結果が生成されます。

sudo java -jar ~/Trimmomatic-0.36/trimmomatic-0.36.jar PE -phred33 \
my_dir/sample_1/77504_S11_L003_R1_001.fastq.gz \
my_dir/sample_1/77504_S11_L003_R2_001.fastq.gz \
my_dir/sample_1/77504_S11_L003_PE1_001_Adapter_Removed.fastq.gz \
my_dir/sample_1/77504_S11_L003_PE1_001_Adapter_Removed_U.fastq.gz \
my_dir/sample_1/77504_S11_L003_PE2_001_Adapter_Removed.fastq.gz \
my_dir/sample_1/776504_S11_L003_PE2_001_Adapter_Removed_U.fastq.gz \
ILLUMINACLIP:~/Trimmomatic-0.36/adapters/TruSeq3-PE.fa:2:30:10 \
LEADING:3 TRAILING:3 SLIDINGWINDOW:4:15 MINLEN:36

すべての入力ファイルは同じディレクトリにあり、すべての入力ペアは同じサブディレクトリにありますが、2つの別々の入力ペアは同じサブディレクトリにありません。

Pair 1:
my_dir/sample_1/77504_S11_L003_R1_001.fastq.gz
my_dir/sample_1/77504_S11_L003_R2_001.fastq.gz

Pair 2:
my_dir/sample_2/77505_S11_L003_R1_001.fastq.gz
my_dir/sample_2/77505_S11_L003_R2_001.fastq.gz

最初のブロックの約50個のファイルに対してコードを実行する必要があります。これはこれまでに得たものですが、コードがアダプタを見つけることができないので正確ではないことを知っています。

ILLUMINACLIP:~/Trimmomatic-0.36/adapters/TruSeq3-PE.fa:2:30:10

繰り返しますが、このコード行は私が投稿した最初のコードブロックでうまく機能します。

AdapterQCTrim () {
# Make base1
base=$(basename $filename .fastq.gz)
echo $base

# Make base2
baseR2=${base/_R1_/_R2_}
echo $baseR2

# Run Trimmomatic
sudo java -jar ~/Trimmomatic-0.36/trimmomatic-0.36.jar PE -phred33 \
${base}.fastq.gz \
${baseR2}.fastq.gz \
${base}.qc.fq.gz \
s1_UP \
${baseR2}.qc.fq.gz \
s2_UP \
ILLUMINACLIP:~/Trimmomatic-0.36/adapters/TruSeq3-PE.fa:2:30:10 \
LEADING:3 TRAILING:3 SLIDINGWINDOW:4:15 MINLEN:36

# Save
gzip -11c s1_UP s2_PE >> paired.qc.fq.gz
gzip -11c s1_UP s2_UP >> orphans.qc.fq.gz
}

for filename in *_R1_*.fastq.gz; do AdapterQCTrim & done

このプロセスを簡素化する方法がある場合は、他のアイデアも開いています。

ベストアンサー1

コードは大丈夫に見えますが、1行だけです。

for filename in *_R1_*.fastq.gz; do AdapterQCTrim & done

これは*_R1_*あなたが期待するように展開されないでしょう。作成中にペアは異なるディレクトリにあるため、サブフォルダに機能を適用するには構造内にある必要が*/_R1_*.fastq.gzあります。forスラッシュを参照してください。サブフォルダーを含む場所でこれを行う必要があります。forループの前に次のようなものを追加すると、これが発生するかどうかを確認できます。

cd theRightDirectory || exit 1

forしかし、フォークされていません。メインプロセスで実行されます。

おすすめ記事