Сначала попробуем напечатать третью запись в FileB
. (Я называю это FileB
вместо File B
, потому что пробелы в именах файлов являются большой головной болью.)
sed -n '/Nitab4.5_0000062g0530.1/,/>Nitab4.5/p' FileB
>Nitab4.5_0000062g0530.1 DNA polymerase, palm domain, DNA-directed DNA polymerase, family B, conserved site, DNA-directed DNA polymerase, family B, multifunctional domain, DNA-directed DNA polymerase, family B
MARVTGVPISFLLARGQSIKVLSQLLRKARQRNLVIPNVKQAGSEQGTYEGATVLEARAG
FYEKPIATLDFASLYPSIMMAYNLCYCTLVTPEEFHKLNLCEVDVNKTPSGEMFVKSDLQ
KGILPEILEELLAARKRAKADLKEAKDPLVKAVLDGRQLALKISANSVYGFTGATVGQLP
CLEISSSVTSYGRQMIEKTKKLVEDKFTVLKGYEHNAEVIYGDTDSVMVQFGVPTVEEAM
KLGREAADHISETFIKPLRLEFEKIYYPYLLISKKRYAGLLWTNPDKHDKMDAKGELLAT
>Nitab4.5_0005502g0010.1 CDC6, C-terminal domain, P-loop containing nucleoside triphosphate hydrolase, Cell division protein Cdc6/18, Winged helix-turn-helix DNA-binding domain
Это подняло первую строку следующей записи. Поэтому вместо завершения в "> Nitab4.5" давайте завершим в пустой строке:
sed -n '/Nitab4.5_0000062g0530.1/,/^$/p' FileB
>Nitab4.5_0000062g0530.1 DNA polymerase, palm domain, DNA-directed DNA polymerase, family B, conserved site, DNA-directed DNA polymerase, family B, multifunctional domain, DNA-directed DNA polymerase, family B
MARVTGVPISFLLARGQSIKVLSQLLRKARQRNLVIPNVKQAGSEQGTYEGATVLEARAG
FYEKPIATLDFASLYPSIMMAYNLCYCTLVTPEEFHKLNLCEVDVNKTPSGEMFVKSDLQ
KGILPEILEELLAARKRAKADLKEAKDPLVKAVLDGRQLALKISANSVYGFTGATVGQLP
CLEISSSVTSYGRQMIEKTKKLVEDKFTVLKGYEHNAEVIYGDTDSVMVQFGVPTVEEAM
KLGREAADHISETFIKPLRLEFEKIYYPYLLISKKRYAGLLWTNPDKHDKMDAKGELLAT
Теперь сделаем это с переменной:
line=Nitab4.5_0000062g0530.1; sed -n '/$line/,/^$/p' FileB
Мы ничего не получаем, потому что оболочка передала $line
в sed, и у sed есть свои представления о том, что это значит. Чтобы оболочка расширила переменную перед передачей ее в sed, мы должны использовать двойные кавычки:
line=Nitab4.5_0000062g0530.1; sed -n "/$line/,/^$/p" FileB
>Nitab4.5_0000062g0530.1 DNA polymerase, palm domain, DNA-directed DNA polymerase, family B, conserved site, DNA-directed DNA polymerase, family B, multifunctional domain, DNA-directed DNA polymerase, family B
MARVTGVPISFLLARGQSIKVLSQLLRKARQRNLVIPNVKQAGSEQGTYEGATVLEARAG
FYEKPIATLDFASLYPSIMMAYNLCYCTLVTPEEFHKLNLCEVDVNKTPSGEMFVKSDLQ
KGILPEILEELLAARKRAKADLKEAKDPLVKAVLDGRQLALKISANSVYGFTGATVGQLP
CLEISSSVTSYGRQMIEKTKKLVEDKFTVLKGYEHNAEVIYGDTDSVMVQFGVPTVEEAM
KLGREAADHISETFIKPLRLEFEKIYYPYLLISKKRYAGLLWTNPDKHDKMDAKGELLAT
Если это удовлетворительно, мы можем начать с l oop. Всегда начинайте с чего-то простого:
while read line; do echo $line; done < FileA
Nitab4.5_0000062g0520.1
Nitab4.5_0000436g0070.1
Nitab4.5_0000375g0110.1
Эти пустые строки - это боль, поэтому давайте удалим их. Мы можем сделать это несколькими способами, но так как мы в любом случае используем sed, давайте используем sed:
sed '/^$/d' FileA | while read line; do echo $line; done
Nitab4.5_0000062g0520.1
Nitab4.5_0000436g0070.1
Nitab4.5_0000375g0110.1
Теперь мы собрали все вместе:
sed '/^$/d' FileA | while read line; do sed -n "/$line/,/^$/p" FileB; done