Это довольно легко сделать вawk
:
awk -vtarget=fox '
/LOCUS/ { in_gene = 1 }
in_gene { if (gene == "") gene = $0; else gene = gene ORS $0; }
$0 ~ target { found = 1 }
/\/\// { if (in_gene && found) print gene
gene = ""; in_gene = 0; found = 0
}
'
target
строку (имя гена ), которую вы ищете. Я использовал fox
в качестве примера. LOCUS
, мы знаем, что смотрим на ген. LOCUS
строка )просто присваиваются переменной gene
. После этого мы добавляем (добавляем )текущую строку($0
)к переменной gene
с новой строкой (ORS=разделитель выходных записей )между старой стоимостью и добавленной стоимостью. found
. /\/\//
для поиска //
. Когда мы видим его, мы проверяем, является ли текущий ген тем, который мы ищем, и, если да, распечатайте его. Затем сбросьте, чтобы продолжить поиск. Если вы уверены, что искомый ген встречается только один раз в файле (или, если вам нужно только первое вхождение ), Вы можете просто выйти здесь.