我是bash脚本的初学者,有人可以帮我吗?
- 在目录 (
pamlfiles/
) 中,我有文件列表 (*.fa
)OG0018053.fa OG0018054.fa OG0018055.fa
- 文件如下所示:
head -n 2 ../pamlfiles/* ==> ../pamlfiles/OG0018053.fa <== >C.rhe ATGAGG------------GTCCTCCTGCTTCTCGGATTGGTGGCTTTTGGCCTGGCTGAC ==> ../pamlfiles/OG0018054.fa <== >L.fab atg---------------------acggacgagatatctctggcgtgtggcatgtcagga ==> ../pamlfiles/OG0018055.fa <== >A.ven ATGAACACTGCCACTCCCACCGAGTTTGACTTCTCTTTCTTGGAAGAGGGCTTCTCCGCC
- 我使用以下脚本 (
forloop.sh
) 处理它们:#!/bin/bash for file in ../pamlfiles/*.fa do filename=$(basename -- "$file") gene_name="${filename%%.*}" cp codeml_0_opt1_templ.ctl codeml_0.ctl sed -i -e "s/GENE/$gene_name/g" codeml_0.ctl codeml codeml_0.ctl done
但是,当我执行时forloop.sh
,我得到了错误
Sequence file ../pamlfiles/OG0018055 not found!
codem1_0_opt1_templ.ctl
看起来像这样:
head codeml_0_opt1_templ.ctl
seqfile = ../pamlfiles/GENE
outfile = results/GENE_M0.txt
treefile = OG0018055.fa.m.fa.mt.py.nex.treefile
noisy = 9
verbose = 0
runmode = 0
seqtype = 1
CodonFreq = 2
我哪里错了?
如果您查看
codem1
进程的输出(无论可能是什么),它表明它没有找到该文件OG0018055
- 这只是合乎逻辑的,因为该文件实际上被称为.OG0018055.fa
在您的脚本中,您从行中的文件名中删除
.fa
扩展名获取基因名称。然后,您可以使用文件模板中的基因名称
sed
替换所有出现的模式。GENE
但是,这意味着在您更新codeml_0.ctl
的文件中,该seqfile
行如下所示:所以
.fa
这里缺少扩展名。因此,只需修改您的模板文件以读取
这样
.fa
文件扩展名就不会丢失。