linux - acrescente, mas pule os dados existentes

1

Sendo um pouco novo no linux, estou tentando copiar, mas anexar informações existentes de várias listas atualizadas em diretórios diferentes, aos arquivos existentes que podem ter algumas informações correspondentes, mas sem duplicação.

/dir1/file1
/dir1/file2
/dir2/file1
/dir2/file2

Depois, dentro dos arquivos, por exemplo:

/ dir1 / file1:

aaa
bbb
ccc

/ dir2 / file1:

aaa
bbb
ccc
ddd
eee

Então eu sei que normalmente eu poderia cat / dir1 / file1 > > / dir2 / file1, mas o resultado ficaria assim com as linhas duplicadas:

aaa
bbb
ccc
ddd
eee
aaa
bbb
ccc

Versus os outros arquivos podem ser: / dir1 / file2

mmm
nnn
ooo

/ dir2 / file2

mmm
nnn
zzz
yyy

Eu gostaria que o arquivo final / dir2 / file2 contivesse:

mmm
nnn
ooo
zzz
yyy

Então, como eu faria isso para evitar linhas duplicadas em vários arquivos diferentes em pastas diferentes? Estamos falando de 468 arquivos em aproximadamente 115 pastas, onde dir1 tem os dados mais antigos originais, e dir2 tem os dados mais novos, mas pode estar faltando algumas das linhas / entradas originais / personalizadas. Estes são simplesmente arquivos de dados lidos por outro programa, por isso não é código, mas eu ainda preferiria não ter vários GB de dados extras desnecessários causados pela duplicação. Este é um servidor (CentOS 6) com apenas cli, e acesso root ssh direto / completo.

Qualquer ajuda seria apreciada.

    
por Mike K 06.04.2016 / 18:55

1 resposta

0

Para distribuições Debian , o pacote john inclui unique , que funciona como um unsorted uniq :

apt install john

Após a instalação, execute:

cat /dir1/file2 /dir2/file2 | unique foo ; cat foo

Saída:

mmm
nnn
ooo
zzz
yyy

Note que como os utilitários * nix vão a versão atual de unique (v1.8.0-2) é um pouco grosseira, não é possível exportar para STDOUT ou qualquer arquivo existente. Portanto, um novo nome de arquivo de saída temporário foo é necessário.

    
por 09.09.2016 / 14:15