如何优雅地将变量传递给命令
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
的行,然后是几个 sed
和 grep
命令来制作文件可解析,最后将所有内容写入新文件 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
我有一组命令目前只能处理一个文件:
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
的行,然后是几个 sed
和 grep
命令来制作文件可解析,最后将所有内容写入新文件 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