根据列表文件对 bash 脚本的每一行进行不同的更改

Make different changes in each line of bash script based on a list file

我正在整理一份包含 XML 片段的 URL 列表,稍后 运行 继续。每个 URL 之间只有一点点不同,我有一个要填写的不同值的列表。有没有一种简单的方法可以将每个 URL 上的一点点更改为不同的值?我知道 sublime text 可以将不同行上的同一事物更改为另一事物;我在问是否有办法做到这一点,除了每一行要改变的东西是不同的。

我正在尝试从生物学数据库 (Ensembl 97) 访问数据,一种选择是获取他们提供的包含 XML 代码的 URL。我想在将来为不同的 species/genes 属性重用这些代码。例如,现在我有代码 运行 一个基因列表来获取基于一个物种(阿尔及利亚小鼠)的属性;我想更改该代码并将其用于其他 90 个物种。

我有以下代码来获取物种 "cabingdonii" 所需的信息,由行尾的最后一个属性名称定义标识:

wget -O cabingdonii.txt 'http://www.ensembl.org/biomart/martservice?query=<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE Query><Query  virtualSchemaName = "default" formatter = "TSV" header = "0" uniqueRows = "0" count = "" datasetConfigVersion = "0.6" ><Dataset name = "hsapiens_gene_ensembl" interface = "default" ><Filter name = "ensembl_gene_id" value = "ENSG00000196565"/><Attribute name = "ensembl_gene_id" /><Attribute name = "cabingdonii_homolog_orthology_type" /></Dataset></Query>'

我还有其他三个物种的清单: 姆斯普雷图斯 vpacos 妈妈

我想再重复wget代码三次,每次都改

<Attribute name = "cabingdonii_homolog_orthology_type" />

进入另一个物种的属性名称,如:

<Attribute name = "mspretus_homolog_orthology_type" />
<Attribute name = "vpacos_homolog_orthology_type" />
<Attribute name = "mmarmota_homolog_orthology_type" />

其余代码保持不变。 我试过 运行 一个带有 python 的 for 循环,但是所有的单引号和双引号,以及斜杠,都很难改变,尤其是在现实中,代码比这长得多例如。

为了减少引用和转义问题,将字符串存储在变量中通常很有帮助。然后你只需要弄清楚如何为变量赋值转义,而在别处使用该值可以绕过不需要的解释。

这是一个例子:

whackyprefix='<?xml version="1.0"><Attribute name="'
whackysuffix='" more="...">'

values=( mspretus vpacos mmarmota )

printf "$whackyprefix%s$whackysuffix\n" "${values[@]}"

输出:

<?xml version="1.0"><Attribute name="mspretus" more="...">
<?xml version="1.0"><Attribute name="vpacos" more="...">
<?xml version="1.0"><Attribute name="mmarmota" more="...">

使用双引号:

$ for F in mspretus_homolog_orthology_type vpacos_homolog_orthology_type mmarmota_homolog_orthology_type ; do echo -n "$F " && wget -q -O - "http://www.ensembl.org/biomart/martservice?query=<?xml version=\"1.0\" encoding=\"UTF-8\"?><Query  virtualSchemaName = \"default\" formatter = \"TSV\" header = \"0\" uniqueRows = \"0\" count = \"\" datasetConfigVersion = \"0.6\" ><Dataset name = \"hsapiens_gene_ensembl\" interface = \"default\" ><Filter name = \"ensembl_gene_id\" value = \"ENSG00000196565\"/><Attribute name = \"ensembl_gene_id\" /><Attribute name = \"$F\" /></Dataset></Query>" ; done

mspretus_homolog_orthology_type ENSG00000196565 
vpacos_homolog_orthology_type ENSG00000196565   
mmarmota_homolog_orthology_type ENSG00000196565 

注:生物信息学使用https://biostars.org or https://bioinformatics.stackexchange.com/