Isso é bastante fácil em 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
}
'
- Defina a variável
target
para a string (nome do gene) que você está procurando. Eu useifox
como exemplo. - Quando vemos a palavra
LOCUS
, sabemos que estamos vendo um gene. - Enquanto estivermos olhando para um gene, acumulemos seu conteúdo.
A primeira linha (a linha
LOCUS
) é atribuída apenas à variávelgene
. Posteriormente, adicionamos (anexamos) a linha atual ($0
) à variávelgene
com uma nova linha (ORS = Output Record Separator) entre o valor antigo e o valor adicionado. - Se o gene atual contiver o nome do gene que você está procurando,
defina o sinalizador
found
. - Temos que usar o feio
/\/\//
para procurar por//
. Quando vemos uma, verificamos se o gene atual é o que procuramos, e, em caso afirmativo, imprima-o. Em seguida, redefina para continuar pesquisando. Se você tem certeza de que o gene que você está procurando ocorre apenas uma vez no arquivo (ou se você quiser apenas a primeira ocorrência), você poderia simplesmente sair daqui.