Assumindo que ambos os arquivos não são enormes , o script python abaixo também fará o trabalho.
Como funciona
Ambos os arquivos são lidos pelo script. As linhas em file_1 (o arquivo que tem precedência) são divididas pelo diretório digitado para o arquivo na seção head (no seu exemplo /mnt/app/
).
Posteriormente, as linhas no arquivo_1 são gravadas no arquivo de saída (o arquivo mesclado). Ao mesmo tempo, as linhas do arquivo_2 são removidas da lista de linhas se a cadeia de caracteres de identificação (a seção após o ponto de montagem) ocorrer na linha. Finalmente, as linhas "restantes" do arquivo_2 (das quais nenhum dupe existe no arquivo_1) são gravadas no arquivo de saída também. O resultado:
file_1:
1058,b8203a236b4f15316e516165a6546666,/mnt/app/Certificados/ca.crt
2694,8a815adefde4fa0c263e74832b15de64,/mnt/app/Certificados/ca.db.certs/01.pem
136,77bf2e5313dbaac4df76a4b72df2e2ad,/mnt/app/Certificados/ca.db.index
arquivo_2:
1058,b8203a236b4f15316e516165a6546666,/mnt/app/Certificados/ca.crt
3,72b2ac90f7f3ff075a937d6be8fc3dc3,/mnt/temp/Certificados/ca.db.serial
2694,8a815adefde4fa0c263e74832b15de64,/mnt/app/Certificados/ca.db.certs/01.pem
136,77bf2e5313dbaac4df76a4b72df2e2ad,/mnt/app/Certificados/ca.db.index
mesclado:
1058,b8203a236b4f15316e516165a6546666,/mnt/app/Certificados/ca.crt
2694,8a815adefde4fa0c263e74832b15de64,/mnt/app/Certificados/ca.db.certs/01.pem
136,77bf2e5313dbaac4df76a4b72df2e2ad,/mnt/app/Certificados/ca.db.index
3,72b2ac90f7f3ff075a937d6be8fc3dc3,/mnt/temp/Certificados/ca.db.serial
O script
#!/usr/bin/env python3
#---set the path to file1, file2 and the mountpoint used in file1 below
f1 = "/path/to/file_1"; m_point = "/mnt/app"; f2 = "/path/to/file_2"
merged = "/path/to/merged_file"
#---
lines1 = [(l, l.split(m_point)[-1]) for l in open(f1).read().splitlines()]
lines2 = [l for l in open(f2).read().splitlines()]
for l in lines1:
open(merged, "a+").write(l[0]+"\n")
for line in [line for line in lines2 if l[1] in line]:
lines2.remove(line)
for l in lines2:
open(merged, "a+").write(l+"\n")
Como usar
- Copie o script em um arquivo vazio, salve-o como
merge.py
- na seção head do script, defina os caminhos para
f1
(file_1
),f2
, o caminho para o arquivo de mesclagem e o ponto de montagem, conforme mencionado emfile_1
. -
Execute-o pelo comando:
python3 /path/to/merge.py
Editar
Ou um pouco mais curto:
#!/usr/bin/env python3
#---set the path to file1, file2 and the mountpoint used in file1 below
f1 = "/path/to/file_1"; m_point = "/mnt/app"; f2 = "/path/to/file_2"
merged = "/path/to/merged_file"
#---
lines = lambda f: [l for l in open(f).read().splitlines()]
lines1 = lines(f1); lines2 = lines(f2); checks = [l.split(m_point)[-1] for l in lines1]
for item in sum([[l for l in lines2 if c in l] for c in checks], []):
lines2.remove(item)
for item in lines1+lines2:
open(merged, "a+").write(item+"\n")