ここでは2つの変数があります。

ここでは2つの変数があります。

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 

文字列だけがあり、アダプタシーケンスを削除する必要があるため、echofromも削除しました。-A echo $secondecho-A

関連情報