Eu li sobre diff e patch, mas não consigo descobrir como aplicar o que preciso. Eu acho que é bem simples, então, para mostrar meu problema, pegue estes dois arquivos:
a.xml
<resources>
<color name="same_in_b">#AAABBB</color>
<color name="not_in_b">#AAAAAA</color>
<color name="in_b_but_different_val">#AAAAAA</color>
<color name="not_in_b_too">#AAAAAA</color>
</resources>
b.xml
<resources>
<color name="same_in_b">#AAABBB</color>
<color name="in_b_but_different_val">#BBBBBB</color>
<color name="not_in_a">#AAAAAA</color>
</resources>
Eu quero ter uma saída, que se parece com isso (ordem não importa):
<resources>
<color name="same_in_b">#AAABBB</color>
<color name="not_in_b">#AAAAAA</color>
<color name="in_b_but_different_val">#BBBBBB</color>
<color name="not_in_b_too">#AAAAAA</color>
<color name="not_in_a">#AAAAAA</color>
</resources>
A mesclagem deve conter todas as linhas ao longo destas regras simples:
- qualquer linha que esteja apenas em um dos arquivos
- se uma linha tiver o mesmo nome, mas um valor diferente, use o valor do segundo
Eu quero aplicar esta tarefa dentro de um script bash, para que não seja necessário fazer nessesariamente o diff e o patch, se outro programa for mais adequado
diff
pode dizer quais linhas estão em um arquivo, mas não no outro, mas apenas na granularidade de linhas inteiras.patch
é adequado apenas para fazer as mesmas alterações em um arquivo semelhante (talvez uma versão diferente do mesmo arquivo ou um arquivo totalmente diferente, no entanto, os números das linhas e as linhas adjacentes de cada alteração são idênticas ao seu arquivo original). Portanto, não, eles não são particularmente adequados para esta tarefa. Você pode querer dar uma olhada,wdiff
mas a solução provavelmente requer um script personalizado. Como seus dados se parecem com XML, convém procurar alguma ferramenta XSL.