如何优雅地将变量传递给命令

How to elegantly pass variables to command

我有一组命令目前只能处理一个文件:

sed -n -e '/ABC/,/LOCUS/ p' mainfile.gbk | sed -e '$ d' >temp1
sed '/     source/,/     gene/{/     gene/!d}' temp1 >temp2
grep -v "     gene" temp2 >temp3
grep -v "                     /locus_tag" temp3 >temp4
sed 's/product/locus_tag/g' temp4 >ABC.txt
echo "DONE" >>ABC.txt
rm temp*

(我知道,效率不高但对我有用)。简要说明它的作用:它从文件 mainfile.gbk 输出从字符串 ABC 到行 LOCUS 的行,然后是几个 sedgrep 命令来制作文件可解析,最后将所有内容写入新文件 ABC.txt.

现在我想在字符串列表上迭代该命令,即

list.txt

ABC
DEF
GHI

以便获取 list.txt 中的每一行并将其分配给一个变量,然后是命令 运行 最后对于 list.txt 中的每一行输出一个文件。

我想把命令放在一个 while read line 循环中,但不知何故,变量的赋值并没有 work/they 没有传递给命令...

如果您确定文本被格式化为单列(没有注释或空行或任何其他内容),您可以使用这样的 for 循环。

for token in `cat list.txt`
do
    sed -n -e "/$token/,/LOCUS/ p" mainfile.gbk | sed -e '$ d' >temp1
    sed '/     source/,/     gene/{/     gene/!d}' temp1 >temp2
    grep -v "     gene" temp2 >temp3
    grep -v "                     /locus_tag" temp3 >temp4
    sed 's/product/locus_tag/g' temp4 >$token.txt
    echo "DONE" >>$token.txt
    rm temp*
done