Variable
Here-document 有兩個變數
嘗試使用 here-document 的兩個變數來生成 bash 腳本列表。我遇到的問題是我無法將兩個變數正確放入腳本中,並且輸出文件(只有一個文件)的文件名為
cut_cat.sh
,基本上程式碼被解釋為 cat 為文本,而不是函式。我該如何改進呢?這是在 bash shell 環境中。作業系統是紅帽 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
其中很多都是猜測,因為您根本沒有告訴我們任何細節,但我認為這
${FA_PATH}/R2_adaptor
會擴展為文件名,我認為您要做的是迭代文件的內容。這意味著您可能正在尋找的是for n in $(cat ${FA_PATH}/R2_adaptor)
.但是,儘管如果每行只有一個字元串,這在這裡會起作用,但最好
while
習慣於對這樣的事情使用循環。我再次猜測您的輸入文件有兩個由 分隔的字元串
:
,例如: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
期望刪除一個適配器序列。