Você pode usar sed
:
sed '/\s/{H;d;}
G;s/\nB/#B/g
s/^\(.*\)\(\n\n.*#\)\(B\s*\)/#/
/^[^#]*\n/d
:a;s/^\([^#]*\)\(#.*\n\)\(A[^#]*\)\([^\n]*#\)/#/;ta
s/#\n.*//;y/#/\n/' main file1
Primeiro, leia o arquivo main
para coletar os códigos de cada nome no espaço de espera (linha 1). Então, para cada linha de file1
acrescentar o espaço de espera, substitua as linhas novas antes de B
linhas com #
para facilitar a análise (linha 2) e pesquise com referências anteriores para os códigos correspondentes (linha 3). Apagar linhas sem correspondências (linha 4). Agora faça um loop para coletar os nomes para o padrão fornecido (linha 5). Por fim, imprima com o espaço restante restante removido e #
convertido de volta para novas linhas (linha 6). (Nota: funciona apenas com o GNU sed
)