Insira o segundo conteúdo do arquivo usando o awk

1

Estou tentando anexar todo o conteúdo do segundo arquivo (é um log) na tag XML <log> usando awk . Não consigo combinar os dois arquivos de entrada em um, pois estou usando um FS="\n" RS="\n\n" que é adequado para o meu primeiro arquivo de entrada. Qual parte deve estar entre meu awk code <log>WHAT_TO_FEED_HERE?</log> , não consigo determinar.

Todas as sugestões seriam muito úteis.

Input_file1:

Sara
123
[email protected]

John
456
[email protected]

Input_file2:

#This is first line along with # symbol

#There were two blank lines spaces above
#Candidatedata1 values

#Some more random text

Eu precisaria do resultado final como abaixo:

<name>Sara</name>
<id>123</id>
<email>[email protected]</email>
<log>
#This is first line along with # symbol

#There were two blank lines spaces above
#Candidatedata1 values

#Some more random text
</log>

<name>John</name>
<id>456</id>
<email>[email protected]</email>
<log>
#This is first line along with # symbol

#There were two blank lines spaces above
#Candidatedata2 values

#Some more random text
</log>

Eu usei a instrução awk abaixo:

awk 'BEGIN{FS = "\n";RS = "\n\n"; print " "}
  { print "<candidate>" }
  { print "<name>"$1"</name>" }
  { print "<id>"$2"</id>" }
  { print "<email>"$3"</email>" }
  { print "<log>"WHAT_TO_FEED_HERE?"</log>" }
  { print "</candidate>" }
  {print " " }' Input_file1.txt Input_file2.txt> candidatefinaloutput.xml
    
por alex 07.05.2015 / 19:28

1 resposta

0

O awk é um pouco complicado quando você não quer aplicar o mesmo processamento a todos os arquivos, mas isso pode ser feito.

Para este caso de uso, eu li o conteúdo do segundo arquivo no começo e uso isso depois.

BEGIN {
    while (getline <ARGV[2]) {
        logfile = logfile $0 "\n"
    }
    delete ARGV[2];
    FS = "\n"; RS = "\n\n";
}
{
    print "<candidate>";
    print "<name>" $1 "</name>";
    print "<id>" $2 "</id>";
    print "<email>" $3 "</email>";
    print "<log>" logfile "</log>";
    print "</candidate>";
    print "";
}
    
por 08.05.2015 / 00:02

Tags