У меня есть 2 больших файла журнала.Я хочу видеть, находится ли устройство в a, но не в b, и наоборот (исключая строки, где устройство является общим), файлы выглядят как этот пример.
04/09 / 2010,13: 11: 52, Authen OK, user1, группа по умолчанию, 00-24-2B-A1-08-88,29,10.1.1.1, (по умолчанию),,,,,, 13, EAP-TLS ,, device1,
04/19 / 2010,15: 35: 24, Authen OK, user2, группа по умолчанию, 00-24-2B-A1-05-EA,29,10.1.1.2, (по умолчанию) ,,,,,, 13, EAP-TLS ,, device2,
04/09 / 2010,13: 11: 52, Authen OK, user3, группа по умолчанию, 00-24-2B-A1-08-88,29,10.1.1.3, (по умолчанию) ,,,,,, 13, EAP-TLS ,, device3,
04/19 / 2010,15: 35: 24, Authen OK, user4, группа по умолчанию, 00-24-2B-A1-05-EA, 29,10.1.1.4, (по умолчанию) ,,,,,, 13, EAP-TLS ,, device4,
чтобы повторить, мне нужно устройство (поле [-2]) и IP (поле [7]) для каждого устройства, которое находится в лог-файле a, но не b, и находится в b, но не a
Вот что яДо сих пор, но кажется немного неуклюжим и очень медленным (каждый файл имеет около 400K строк).Я дважды ссылаюсьКто-нибудь может предложить эффективность, пожалуйста?Возможно, я использую неправильную логику ??
chst={}
chbs={}
for i,line in enumerate(open('chst.txt').readlines()):
line=line.split(',')
chst[line[-2]+','+str(i)]=','.join(line)
for i,line in enumerate(open('chbs.txt').readlines()):
line=line.split(',')
chbs[line[-2]+','+str(i)]='.'.join(line)
print "these lines are in CHST but not in CHBS"
for a in chst:
if a.split(',')[0] not in str(chbs.values()):
line=chst[a].split(',')
print line[-2], line[7]
print "\nthese lines are in CHBS but not in CHST"
for a in chbs:
if a.split(',')[0] not in str(chst.values()):
line=chbs[a].split(',')
print line[-2], line[7]