尝试使用 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
习惯于对这样的事情使用循环。我再次猜测您的输入文件有两个由 分隔的字符串
:
,例如:如果是这样,您可以这样做:
请注意,我还删除了
echo
from,-A echo $second
因为echo
那里只是一个字符串,并且-A
期望删除一个适配器序列。