ファイルペアに対してプロセスを実行するためにforループを設定しようとしています。ファイル名は次のとおりです。
36_002_CGATGT_L001_R1_005.fastq.gz 36_002_CGATGT_L001_R2_005.fastq.gz 36_002_CGATGT_L001_R1_002.fastq.gz 36_002_CGATGT_L001_R2_002.fastq.gz 62_013_AGTCAA_L001_R1_003.fastq.gz 62_013_AGTCAA_L001_R2_003.fastq.gz
次のコマンドで各ペアを使用する必要があります。
sickle pe -f 36_002_CGATGT_L001_R1_005.fastq.gz \
-r 36_002_CGATGT_L001_R2_005.fastq.gz\
-o trimmed_36_002_CGATGT_L001_R1_005.fastq.gz\
-p trimmed_36_002_CGATGT_L001_R2_005.fastq.gz\
-s 36_002_CGATGT_L001_singles_005.fastq.gz
まず努力しています。
for n in *R1*; do m='basename $n R2' ; echo $m; done
しかし、明らかに、この方法はファイル名の前半と終わりの両方が重要であるため機能しません。 R1とR2が名前の最後の部分になるようにファイル名を変更する必要がありますか?厄介ですが、不可能ではありません
ベストアンサー1
シェルがkshスタイルパラメータ${var/search/replace}
拡張(ksh93
、、、、、、)をサポートしている場合:zsh
mksh
yash
bash
for r1 in *R1*; do
r2=${r1/R1/R2}
singles=${r1/R1/singles}
trimmed1=trimmed$r1
trimmed2=trimmed$r2
sickle pe -f "$r1" \
-r "$r2" \
-o "$trimmed1" \
-p "$trimmed2" \
-s "$singles"
done
POSIXly、あなたはできます
r2=${r1%%R1*}R2${r1#*R1}