0

我有一组当前可用于一个文件的命令:

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*

(我知道,效率不是很高,但对我有用)。简而言之,它的作用是:它从 stringABCLOCUSfile输出行mainfile.gbk,然后是几个sed&grep命令使文件可解析,最后将所有内容写入一个新文件ABC.txt

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

list.txt

ABC
DEF
GHI

这样每一行 fromlist.txt被取出并分配给一个变量,然后运行命令,最后list.txt输出一个文件中的每一行。

我想把命令放在一个while read line循环中,但不知何故,变量的分配不起作用/它们没有传递给命令......

4

1 回答 1

0

如果您确定文本被格式化为单列(没有注释或空行或任何内容),您可以使用这样的 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
于 2018-05-15T18:46:58.570 回答