Код: Выделить всё
0000001G|11111111
0000002G|10000018
0000002G|10000320
0000002G|10000337
0000002G|10000343
101359B|10000018
101359B|16023380
504529A|10000018
504529A|15856008
504529A|16007139
504529A|16007151
504529A|16526483
620667G|16526483
0000003G|22222222
0000003G|33333333
Политика 0000001G не связана ни с какими другими политиками, поскольку она содержит только один номер клиента не связан ни с какими другими политиками.
Аналогично, политика 0000003G не связана ни с какими другими политиками, поскольку она содержит два номера клиентов, не связанных ни с какими другими политиками.Все остальные полисы (0000002G, 101359B, 504529A и 620667G) считаются связанными друг с другом, поскольку, например, полис 0000002G напрямую связан с полисами 101359B и 504529A (поскольку все они имеют одного и того же клиента 10000018 ), но политика 0000002G также косвенно связана с политикой 620667G, поскольку, хотя они не разделяют номер клиента напрямую между собой, политика 620667G использует общего клиента 16526483 с политикой 504529A, и сама эта политика имеет общего клиента с 0000002G, поэтому все они считаются связанные политики.
Я хочу обработать входной файл и получить новый файл «output_file.txt», в котором для каждой политики политика указана в первом столбце и во втором столбце. (пробел между первым и вторым столбцом) указан список связанных политик(ов) (включая саму рассматриваемую политику). Например, в образце входного файла после обработки файл «output_file.txt» будет выглядеть следующим образом:
Код: Выделить всё
0000001G 0000001G
0000002G 0000002G|101359B|504529A|620667G
101359B 101359B|0000002G|504529A|620667G
504529A 504529A|0000002G|101359B|620667G
0000003G 0000003G
Ищу способ сделать это с помощью AWK или Python (обратите внимание, что доступная мне версия Python более ранняя, чем версия 3.6)
Мой (Python) Попытка сценария "linked_policies.py" выглядит следующим образом:
Код: Выделить всё
# Read the input data
with open('linked_policies.txt', 'r') as f:
lines = f.readlines()
# Create a dictionary to store the customers and their associated policies
customer_policies = {}
# Iterate through the lines
for line in lines:
# Split the line into policy and customer
policy, customer = line.strip().split('|')
# Add the customer to the customer_policies dictionary
if customer not in customer_policies:
customer_policies[customer] = set()
customer_policies[customer].add(policy)
# Create a dictionary to store the linked policies
linked_policies = {}
# Link policies based on shared customers
for customer, policies in customer_policies.items():
for policy in policies:
if policy not in linked_policies:
linked_policies[policy] = set(policies)
else:
linked_policies[policy].update(policies)
# Write the output to a file
with open('output_file.txt', 'w') as f:
for policy, linked_policies_set in linked_policies.items():
linked_policies_str = '|'.join(sorted(linked_policies_set))
f.write('{} {}\n'.format(policy, linked_policies_str))
Код: Выделить всё
python ./linked_policies.py
Код: Выделить всё
620667G 504529A|620667G
504529A 0000002G|101359B|504529A|620667G
0000003G 0000003G
0000002G 0000002G|101359B|504529A
101359B 0000002G|101359B|504529A
0000001G 0000001G
Остальные строки неверны (первая, четвертая и пятая строки), поскольку это не так. правильно отображаются все связанные политики.
Подробнее здесь: https://stackoverflow.com/questions/785 ... hon-or-awk