我有 2 个大日志文件。我想查看设备是否在 a 但不在 b 中,反之亦然(排除设备常见的行)文件看起来像这个例子。
04/09/2010,13:11:52,Authen OK,user1,Default Group,00-24-2B-A1-08-88,29,10.1.1.1,(Default),,,,,,13,EAP -TLS,,device1,
04/19/2010,15:35:24,Authen OK,user2,Default Group,00-24-2B-A1-05-EA,29,10.1.1.2,(Default),,, ,,,13,EAP-TLS,,device2,
04/09/2010,13:11:52,Authen OK,user3,Default Group,00-24-2B-A1-08-88,29,10.1.1.3, (默认),,,,,,13,EAP-TLS,,device3,
04/19/2010,15:35:24,Authen OK,user4,Default Group,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]