Я уверен, что получу удар по голове за использование петли, но все же ... вот один способ сделать это.
#!/bin/bash
while read -r line; do
sed -n "/$line/,/^C/p" fileA | sed '$d'
done < fileB
Пример:
./bacteria.sh
C 02030 *Bacterial chemotaxis* [PATH:aap02030]
D NT05HA_0919 maltose-binding periplasmic protein
D NT05HA_0918 maltose-binding periplasmic protein
C 03070 *Bacterial secretion system* [PATH:aap03070]
D NT05HA_1309 protein-export membrane protein SecD
D NT05HA_1310 protein-export membrane protein SecF
D NT05HA_1819 preprotein translocase subunit SecE
D NT05HA_1287 protein-export membrane protein
Где fileA
и fileB
- ваши файлы примеров.
Структура регулярных выражений:
sed -n "/$line/,/^C/p" fileA | sed '$d'
Вывести строки между $ line
и следующей строкой, начинающейся с буквы C
, но исключить ( sed '$ d'
) последняя строка, поскольку она используется просто как «маркер остановки».
sed --version
sed (GNU sed) 4.2.2
bash --version
GNU bash, version 4.2.46(1)-release (x86_64-redhat-linux-gnu)