Eu tenho dois arquivos. Um arquivo inclui dados estruturados e baixo é uma amostra.
article 1 title
article 1 body line 1
article 1 body line 2
+++
article 2 title
article 2 body line 1
article 2 body line 2
article 2 body line 3
+++
article 3 title
article 3 body line 1
article 3 body line 2
+++
article 4 title
article 4 body line 1
article 4 body line 2
article 4 body line 3
Como você pode ver, +++
é o separador de registros. Para cada registro, a primeira linha é o título, todas as outras linhas são o conteúdo deste registro. Outro arquivo é um arquivo de texto simples com uma lista de títulos. Por exemplo:
article 1 title
article 3 title
article 4 title
O que eu quero são os registros com seus títulos listados no segundo arquivo. Assim, para o exemplo acima, o resultado esperado é:
article 1 title
article 1 body line 1
article 1 body line 2
+++
article 3 title
article 3 body line 1
article 3 body line 2
+++
article 4 title
article 4 body line 1
article 4 body line 2
article 4 body line 3
Acho que awk
provavelmente poderia resolver meu problema, mas não sei como.
O que eu tentei é isso:
awk 'BEGIN{RS="(\r?\n)?\+{3}(\r?\n)?"; FS="\r?\n"; ORS="+++"} NR==FNR{a[$0];next} ...' title_list.txt data.txt
Meu problema é que o RS
para os dois arquivos deve ser diferente e não sei como fazê-lo funcionar.
Você pode definir variáveis como RS separadamente para cada arquivo. Por exemplo:
Em
gawk
você pode usar blocos especiaisBEGINFILE
eENDFILE
definir as regras necessárias antes/depois de ler um novo arquivo, por exemplo:Feito pelo método abaixo usando a combinação de sed e awk
comando