Existe uma maneira de mesclar dois arquivos de maneira inteligente? [duplicado]

1

Eu tenho dois arquivos com algumas linhas iguais.

Arquivo A:

command 1{
    some code lines
}
command 2
command 3
command 4{
    some code lines
}

Arquivo B:

command 5
command 3
command 1{
    some code lines
}

Eu gostaria de ter um arquivo final contendo isso:

command 1{
    some code lines
}
command 2
command 3
command 4{
    some code lines
}
command 5

A ordem das linhas não é relevante. Existe uma ferramenta existente (ou um comando) para fazer isso?

    
por fxm 04.09.2013 / 08:29

3 respostas

1

Percebi que isso deveria ser uma resposta de comentário .

Não me lembro se existe uma única ferramenta que faça isso. Mas ! Você pode obter o efeito exato cat'ing os arquivos e, em seguida, usando sort e uniq para fazer o trabalho:

cat A B | sort | uniq

Isso lança o conteúdo de ambos os arquivos juntos, depois classifica as linhas e remove quaisquer duplicatas.

Resultado resultante:

command 1
command 2
command 3
command 4
command 5
    
por 04.09.2013 / 08:37
0

Não há nenhuma ferramenta para o meu conhecimento que irá mesclar os arquivos da maneira que você mostrou. A maioria das ferramentas de mesclagem / difusão funciona com algum nível de contexto em torno das várias linhas, de modo que a ferramenta saiba que dois arquivos podem ser reunidos em vários locais.

O que você está mostrando não tem nenhum contexto real, por isso não vejo como essas ferramentas seriam capazes de fazer isso.

    
por 04.09.2013 / 09:58
0

Você pode fazer algo como:

sed -e 's/_/_u/g;s/%/_p/g;/{$/s/^/%/;/{$/,/}$/b' -e 's/^/%/' A B |
  tr '%\n' '\n%' |
  sort -u |
  tr '%\n' '\n%' |
  sed 's/%//g;s/_p/%/g;s/_u/_/g'

Se os arquivos não contiverem o caractere % , você poderá simplificá-lo para:

sed -e '/{$/s/^/%/;/{$/,/}$/b' -e 's/^/%/' A B |
  tr '%\n' '\n%' |
  sort -u |
  tr -d '\n' |
  tr % '\n'
    
por 04.09.2013 / 11:20

Tags