这里的文档有两个变量

这里的文档有两个变量

尝试使用此处文档的两个变量来生成 bash 脚本列表。我遇到了这样的问题:我无法将两个变量正确放入脚本中,并且输出文件(只有一个文件)的文件名是cut_cat.sh,基本上代码被解释为 cat 文本,而不是函数。我该如何改进这个?

这是在 bash shell 环境中。操作系统是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).

然而,尽管如果每行只有一个字符串,这在这里可行,这个比较好习惯使用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 

请注意,我还删除了echofrom -A echo $second,因为echo那里只是一个字符串,并且-A需要删除适配器序列。

相关内容