Gostaria de transformar esse XML em que apenas algumas linhas certas são unidas. Isso é para que eu possa mais tarde usar apenas linhas específicas. Se esse XML usasse atributos, os dados já estariam em uma linha. Eu não quero fazer isso com qualquer XSLT.
grep, sed, awk, xmlstarlet, xpath seria ótimo
Portanto, se uma linha contiver "<instruction>"
, eu preciso pegar as próximas 4 linhas e colocá-las todas em uma linha. Sem vírgulas. Como mostrado abaixo.
isso não é como a pergunta postada aqui : que tinha um padrão definido de uma data que iniciou a sequência para" participar ".
awk '
/\<instruction\>/ && line {print line; line=""}
{line = line ? line" "$0 : $0}
END {print line}
'
esta dobrada na linha ATÉ a tag final, mas não trouxe a própria linha final.
A plataforma estará no servidor Windows 2012R2. Instalará os utilitários do Gnu. O arquivo tem aproximadamente 100k de tamanho.
<instruction>
<name>AAAAA</name>
<value>WHITE</value>
<type>0</type>
</instruction>
<instruction>
<name>BBBBB</name>
<value>WHITE</value>
<type>0</type>
</instruction>
<instruction>
<name>CCCCC</name>
<value>WHITE</value>
<type>0</type>
</instruction>
<routing/>
<phantom>False</phantom>
<AssemblyHistory/>
SAÍDA DESEJADA: (pode ter empacotado, mas o elemento Instrução deve estar em uma linha)
<instruction><name>AAAAA</name><value>WHITE</value><type>0</type></instruction>
<instruction><name>BBBBB</name><value>WHITE</value><type>0</type></instruction>
<instruction><name>CCCCC</name><value>WHITE</value><type>0</type></instruction>
<routing/>
<phantom>False</phantom>
<AssemblyHistory/>
EXEMPLO SEMELHANTE (XML não bem formado)
data line 2
cust:
tommy
smith
123 main
endcust
data line 16
TRACE: error at xy123
cust:
mary
smith
444 broadway
endcust
LOG: logon tty3
LOG: free memory before gc 33453211
root: ps -ealf tty0
data line 2
cust: tommy smith123 main endcust
data line 16
TRACE: error at xy123
cust:mary smith444 broadway endcust
LOG: logon tty3
LOG: free memory before gc 33453211
root: ps -ealf tty0
Copie o arquivo inteiro para stdout, sem omitir linhas.
Quando você encontrar "cust:":
1) JUNTE-SE às próximas 4 linhas OU
2) JUNTE linhas até encontrar "endcust"
É a mesma coisa, mas desta vez você não pode usar uma ferramenta XML. Então, se este fosse o caso, como você resolveria isso? Se a pergunta top é XML, então tudo bem. Se não, use o segundo exemplo