@
nilamo already provided solution that works. all you need to do is to tweak it accordingly.
data = '''26 Dec 2017 00:00:00,018 [WARN] RAD-AUTH-RES-18 [AUTH_COUNT_LOGGER]: PACKET TYPE : ACCESS REQUEST, RESPONSE : ACCESS ACCEPT, REPLY MESSAGE : Authentication Success, USERNAME : 0221453122@ttml, MAC : ac:f1:df:ea:4c:26, NASIP : 10.124.117.36, NASPORTID : slot=4;subslot=2;port=1;vlanid=3727;vlanid2=1127;
26 Dec 2017 00:00:00,082 [WARN] RAD-AUTH-680 [AUTH_COUNT_LOGGER]: PACKET TYPE : ACCESS REQUEST, RESPONSE : ACCESS REJECT, REPLY MESSAGE : Account is not active, USERNAME : 0220367961@ttml, MAC : 00:17:7c:75:b6:05, NASIP : 10.124.117.36, NASPORTID : slot=5;subslot=2;port=1;vlanid=2000;vlanid2=2488;
26 Dec 2017 00:00:00,115 [WARN] RAD-AUTH-RES-18 [AUTH_COUNT_LOGGER]: PACKET TYPE : ACCESS REQUEST, RESPONSE : ACCESS ACCEPT, REPLY MESSAGE : Authentication Success, USERNAME : 4010059315, MAC : 08:60:6e:c9:dd:9a, NASIP : 10.124.113.246, NASPORTID : slot=6;subslot=2;port=100;vlanid=560;vlanid2=1284;
26 Dec 2017 00:00:00,189 [WARN] RAD-AUTH-695 [AUTH_COUNT_LOGGER]: PACKET TYPE : ACCESS REQUEST, RESPONSE : ACCESS REJECT, REPLY MESSAGE : Account is not active, USERNAME : 0200400681@ttml, MAC : 5c:f4:ab:1f:3a:ec, NASIP : 10.124.117.180, NASPORTID : pppoe lag-50:2925.3643'''
data = data.split('\n')
import csv
def parse_line(line):
line = [item.split(' : ')[-2:] for item in line]
return {key.split(':')[-1].strip(): value for key, value in line}
reader = csv.reader(data)
for line in reader:
row_data = parse_line(line[1:])
print('{USERNAME} {MAC}'.format(**row_data))
Output:
0221453122@ttml ac:f1:df:ea:4c:26
0220367961@ttml 00:17:7c:75:b6:05
4010059315 08:60:6e:c9:dd:9a
0200400681@ttml 5c:f4:ab:1f:3a:ec
parse_line() will return dict (unordered) that has all data (except for time-stamp), e.g.
Output:
{'NASPORTID': 'pppoe lag-50:2925.3643', 'REPLY MESSAGE': 'Account is not active', 'RESPONSE': 'ACCESS REJECT', 'MAC': '5c:f4:ab:1f:3a:ec', 'USERNAME': '0200400681@ttml', 'NASIP': '10.124.117.180', 'PACKET TYPE': 'ACCESS REQUEST'}
I will leave to you to make it work with your file.
Using RegEx is also possible, but let's keep it simple