В сценарии python:
Прагматическое решение
В случае, если это одноразовая работа, характерная для одной ситуации, следующие работы:
[ f1]Выход:
Neeraj:149:neeraj@xyz.com
Rahul:148:rahul@gmail.com
Tarun:143:tarun@gmail.com
Или, если вы хотите сохранить вывод непосредственно в файл:
#!/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")
Как вы, вероятно, знаете, скопируйте сценарий в пустым файлом, установите путь к файлу 1-2 (3) (между кавычками), сохраните его как combine.py, запустите его командой:
python3 /path/to/combine.py
Прагматическое решение
Глядя на два файла, мы имеем дело с базами данных, причем первое поле является ключевым. Следующий сценарий более гибкий и охватывает более гибкий способ создания отчетов о двух файлах (например, в ситуациях), где у нас будет больше полей, чем здесь.
Если мы добавим extra («characterizing») ко второму файлу:
Neeraj:neeraj@xyz.com:Loves to Cook
Rahul:rahul@gmail.com:Collects empty bottles
Tarun:tarun@gmail.com:Weares his glasses upside down
Мы могли бы захотеть добавить описание вместо адреса электронной почты или и то, и другое. Это потребует сценарий вроде:
#!/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)
Результат
Если мы установим:
new_record = i, database_1[1], database_2[2]
Результат:
Neeraj:149:Loves to Cook
Rahul:148:Collects empty bottles
Tarun:143:Weares his glasses upside down
Но если мы установим:
new_record = i, database_1[1], database_2[1]
Результат:
Neeraj:149:neeraj@xyz.com
Rahul:148:rahul@gmail.com
Tarun:143:tarun@gmail.com
И если мы установим:
new_record = i, database_1[1], database_2[1], database_2[2]
Результат есть:
Neeraj:149:neeraj@xyz.com:Loves to Cook
Rahul:148:rahul@gmail.com:Collects empty bottles
Tarun:143:tarun@gmail.com:Weares his glasses upside down
Исправлено это!
Проблема заключалась в записи apparmor:
/path/to/new/location/ r,
/path/to/new/location/** rwk,
на самом деле нужно было быть одним каталогом из того, что было:
/path/to/new/ r,
/path/to/new/** rwk,
Исправлено это!
Проблема заключалась в записи apparmor:
/path/to/new/location/ r,
/path/to/new/location/** rwk,
на самом деле нужно было быть одним каталогом из того, что было:
/path/to/new/ r,
/path/to/new/** rwk,
Исправлено это!
Проблема заключалась в записи apparmor:
/path/to/new/location/ r,
/path/to/new/location/** rwk,
на самом деле нужно было быть одним каталогом из того, что было:
/path/to/new/ r,
/path/to/new/** rwk,
Вы можете попробовать эту вариацию:
1) first check in my.cnf [/etc/mysql/my.cnf] for database files destination.
2) let say that destination is in folder /var/lib/mysql/ and yours database name is "abccompany"
3) stop mysql database
4) move folder [var/lib/mysql/abccompany] to new destination (let say "/diskY")
5) make symbolic link:
ln -s /diskY/abccompany abccompany
6) start mysql database and everything should work just fine.
Вы можете попробовать эту вариацию:
1) first check in my.cnf [/etc/mysql/my.cnf] for database files destination.
2) let say that destination is in folder /var/lib/mysql/ and yours database name is "abccompany"
3) stop mysql database
4) move folder [var/lib/mysql/abccompany] to new destination (let say "/diskY")
5) make symbolic link:
ln -s /diskY/abccompany abccompany
6) start mysql database and everything should work just fine.
Вы можете попробовать эту вариацию:
1) first check in my.cnf [/etc/mysql/my.cnf] for database files destination.
2) let say that destination is in folder /var/lib/mysql/ and yours database name is "abccompany"
3) stop mysql database
4) move folder [var/lib/mysql/abccompany] to new destination (let say "/diskY")
5) make symbolic link:
ln -s /diskY/abccompany abccompany
6) start mysql database and everything should work just fine.