Em python, comece com o arquivo de entrada como um argumento:
import sys
res = [] # list of lists
for line in open(sys.argv[1]):
try:
x, y = line.split() # split on space
except ValueError:
line = line.rstrip()
x, y = line.split(',') # retry with comma
for l in res:
if x in l:
if y not in l:
l.append(y)
break
else:
res.append([x, y])
for line in res:
print ' '.join(line)
O teste if y not in l:
ignora a adição do mesmo valor duas vezes, não tenho certeza se isso é desejado ou se a origem tem tais anomalias. Você pode deixar de fora o teste e sempre executar l.append(y)
.
O código tenta primeiro se dividir no espaço e, em seguida, tenta novamente a vírgula. Isso pressupõe que linhas separadas por vírgula não possuem espaço nelas (ou seja, não são A, B
).
O loop aninhado for
usa (AFAIK) uma particularidade de python: o else
só é executado se o loop for
terminar por esgotamento, o que não é por meio da instrução break. Isso significa que se x
não for encontrado, o par será anexado como nova lista a res
.