bashスクリプトのリストを生成するには、ここで説明されている2つの変数を試してください。この問題があります。両方の変数をスクリプトに正しく入れることができず、出力ファイルのファイル名(ファイルが1つのみ)があります。cut_cat.sh
デフォルトでは、コードは関数ではなくcatテキストとして解釈されます。どうすればこれを改善できますか?
これはbashシェル環境にあります。オペレーティングシステムはRed Hat Linuxです。
入力ファイルには以下がR2_adaptor
含まれますSample_ID:CGATATTCG
(前半はサンプルID、後半は削除するシーケンス)。彼らは互いに分離されています:
。
for n in cat ${FA_PATH}/R2_adaptor;
do first=$(echo $n | cut -d ":" -f 1)
second=$(echo $n | cut -d ":" -f 2)
cat <<- EOF > ${SCRIPTS}/cut_${first}.sh
#!/bin/bash
FA_PATH="/home/xxx/test_files"
cutadapt -a TTCCTCCT -A echo ${second} --cores=14 \
-o ${FA_PATH}/${first}_R1_trim.fastq.gz \
-p ${FA_PATH}/${first}_R2_trim.fastq.gz \
${FA_PATH}/${first}_R1_001.fastq.gz ${FA_PATH}/${first}_R2_001.fastq.gz
EOF
done
${FA_PATH}/R2_adaptor
以下はファイルの例です。
Sample2:AGAAGTTT
Sample3:TTGGATAT
Sample4:GTAGTATT
Sample5:ATATATAT
Sample6:AACTTGGC
Sample7:GATGGTGA
Sample8:GTCCCTAT
答え1
詳細は全く教えてくれなかったので、多くの部分が推測です。考える${FA_PATH}/R2_adaptor
ファイル名に展開されます。考えるあなたが望むのは、ファイルの内容を繰り返すことです。これはおそらくあなたが探しているものであることを意味しますfor n in $(cat ${FA_PATH}/R2_adaptor)
。
しかし、1行に文字列が1つしかない場合はこれは機能しますが、これは良いですwhile
このようなことをするには、ループの使用に慣れておく必要があります。
もう一度、入力ファイルに次のように区切られた2つの文字列があるようです:
。
ACTTGCTATAGCGAT:CGATATTCGGCGATAT
その場合は、次のようにできます。
#!/bin/bash
FA_PATH="/home/xxx/test_files"
SCRIPTS="/path/to/scripts"
while IFS=: read -r first second rest_if_any_ignored; do
cat <<- EOF > "${SCRIPTS}"/cut_"${first}".sh
#!/bin/bash
cutadapt -a TTCCTCCT -A '${second}' --cores=14 \
-o '${FA_PATH}/${first}_R1_trim.fastq.gz' \
-p '${FA_PATH}/${first}_R2_trim.fastq.gz' \
'${FA_PATH}/${first}_R1_001.fastq.gz'
'${FA_PATH}/${first}_R2_001.fastq.gz'
EOF
done < "${FA_PATH}"/R2_adaptor
文字列だけがあり、アダプタシーケンスを削除する必要があるため、echo
fromも削除しました。-A echo $second
echo
-A