Как элегантно передать переменные в команду - PullRequest
0 голосов
/ 15 мая 2018

У меня есть набор команд, которые в настоящее время работают с одним файлом:

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*

(знаю, не очень эффективно, но у меня работает). Коротко о том, что он делает: выводит строки из строки ABC в строку LOCUS из файла mainfile.gbk, затем пару команд sed & grep, чтобы сделать файл анализируемым, и, наконец, записывает все в новый файл ABC.txt.

Теперь я хочу повторить эту команду по списку строк, т.е.

list.txt

ABC
DEF
GHI

так что каждая строка из list.txt берется и присваивается переменной, затем выполняются команды и, наконец, для каждой строки в list.txt выводится один файл.

Я думал о размещении команд в цикле while read line, но каким-то образом назначение переменных не работает / они не передаются командам ...

1 Ответ

0 голосов
/ 15 мая 2018

Если вы уверены, что текст отформатирован как один столбец (без комментариев, пустых строк или чего-либо), вы можете использовать цикл 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...