2 つの大きなログファイルがあります。デバイスが a にあるが b にないかどうか、およびその逆 (デバイスが一般的な行を除く) を確認したい場合、ファイルは次の例のようになります。
04/09/2010,13:11:52,認証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,
繰り返しますが、ログファイル a にはあるが b にはなく、b にはあるが a ではないデバイスごとに、デバイス (フィールド [-2]) と IP (フィールド [7]) が必要です。
これまでに行ったことは次のとおりですが、少しぎこちなく、非常に遅いです (各ファイルには約 400K 行あります)。私は2回相互参照しています。誰でも効率を提案できますか?おそらく私は間違ったロジックを使用していますか??
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]