Em um script python:
Uma solução pragmática
Caso seja um "trabalho único", específico para uma situação, os seguintes trabalhos:
#!/usr/bin/env python3
with open(file1) as names:
names = sorted(names.readlines())
with open(file2) as data:
data = data.readlines()
for i in names:
item = i.replace("\n", "")+str([d[d.find(":"):].replace("\n", "") for d in data if d.startswith(i.split(":")[0])][0])
print(item)
Saída:
Neeraj:149:[email protected]
Rahul:148:[email protected]
Tarun:143:[email protected]
Ou, se você quiser salvar a saída diretamente em um arquivo:
#!/usr/bin/env python3
with open(file1) as names:
names = sorted(names.readlines())
with open(file2) as data:
data = data.readlines()
with open(file3, "wt") as output:
for i in names:
output.write(i.replace("\n", "")+str([d[d.find(":"):].replace("\n", "") for d in data if d.startswith(i.split(":")[0])][0])+"\n")
Como você provavelmente sabe, copie o script em um arquivo vazio, defina o caminho para o arquivo 1-2 (3) (entre aspas), salve-o como combine.py
, execute-o pelo comando:
python3 /path/to/combine.py
Uma solução mais digna de banco de dados
Olhando para os dois arquivos, estamos lidando com bancos de dados, com o primeiro campo como chave. O script a seguir é mais flexível e abrange uma maneira mais flexível de fazer relatórios dos dois arquivos, em situações (por exemplo) em que teríamos mais campos do que aqui é o caso.
Se adicionarmos um campo extra ("caracterizando") ao segundo arquivo:
Neeraj:[email protected]:Loves to Cook
Rahul:[email protected]:Collects empty bottles
Tarun:[email protected]:Weares his glasses upside down
Podemos querer adicionar a caracterização em vez do endereço de e-mail, ou ambos. Isso pediria um script como:
#!/usr/bin/env python3
db1 = "/path/to/file1"; db2 = "/path/to/file2"
with open(db1) as data1:
rc = [l.replace("\n", "").split(":") for l in data1.readlines()]
with open(db2) as data2:
records2 = [l.replace("\n", "").split(":") for l in data2.readlines()]
uniques = sorted(set(item[0] for item in rc)) # find keys
report = []
for i in uniques:
database_1 = [r for r in rc if r[0] == i][0]
database_2 = [r for r in records2 if r[0] == i][0]
# -----------------------------------------------------------------------
# set the required fields for report here:
new_record = i, database_1[1], database_2[1]
# -----------------------------------------------------------------------
report.append((":").join(new_record))
for item in report:
print(item)
Resultado
Se definirmos:
new_record = i, database_1[1], database_2[2]
O resultado é:
Neeraj:149:Loves to Cook
Rahul:148:Collects empty bottles
Tarun:143:Weares his glasses upside down
Mas se definirmos:
new_record = i, database_1[1], database_2[1]
O resultado é:
Neeraj:149:[email protected]
Rahul:148:[email protected]
Tarun:143:[email protected]
E se definirmos:
new_record = i, database_1[1], database_2[1], database_2[2]
O resultado é:
Neeraj:149:[email protected]:Loves to Cook
Rahul:148:[email protected]:Collects empty bottles
Tarun:143:[email protected]:Weares his glasses upside down