Com o programa awk
subsequente:
awk '
BEGIN { FS = "([[:space:]]+|[|])" }
NR==FNR { id[$1] ; next }
/^>>/ && $2 in id { data = $2 ; f = 1 }
f && /^[0-9]/ { data = data " : " $10 " " $11 }
f && !NF { f = 0 ; print data }
' FileB FileA
você receberá esta saída:
AT5G46880.1 : 317 555
AT1G73360.1 : 230 457 : 544 566
Observação: adicionei o segundo ID ao arquivo B para que você possa ver como várias linhas de atributo serão tratadas.
Como funciona o programa awk
:
BEGIN
- o separador de campo é definido para que depois possamos acessar o ID de linhas que começam com "> >".
NR==FNR
- este é um padrão que é verdadeiro ao ler o primeiro arquivo; os IDs são armazenados.
/^>>/ && $2 in id
- combinamos linhas com os IDs e verificamos se o ID encontrado foi memorizado no primeiro arquivo. O ID é salvo para saída e um conjunto de sinalizadores de processamento.
f && /^[0-9]/
- se o sinalizador estiver definido e correspondermos a uma linha que começa com um dígito, adicionamos os respectivos campos 10 e 11 aos dados de saída (separados por dois pontos).
f && !NF
- se o sinalizador estiver definido e uma linha vazia for encontrada, o processamento será feito para aquele bloco e o sinalizador será limpo.