import re
from collections import defaultdict
def extract_unique_id_lines(input_path, output_path):
uuid_regex = re.compile(
r'''^ID: \{? ( [0-9a-fA-F]{8} - (?:[0-9a-fA-F]{4}-){3} # Three middle groups (non-capturing group for performance)
[0-9a-fA-F]{12} ) \}? (?!\S) ''',
re.IGNORECASE | re.VERBOSE
)
uuid_regex = re.compile(
r'^ID:\{?([0-9a-fA-F]{8}-(?:[0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12})\}?\b',
re.IGNORECASE
)
id_counter = defaultdict(int)
logs = defaultdict(int)
with open(input_path, 'r', encoding='utf-8') as f:
for line_num, line in enumerate(f, 1):
line = line.split('#')[0].strip()
if match := uuid_regex.search(line):
raw_uuid = match.group(1).strip('{}')
standard_uuid = raw_uuid.lower()
logs[standard_uuid] = line
id_counter[standard_uuid] += 1
unique_lines = []
with open(input_path, 'r', encoding='utf-8') as f:
for line_num, line in enumerate(f, 1):
line = line.split('#')[0].strip()
if match := uuid_regex.search(line):
raw_uuid = match.group(1).strip('{}')
standard_uuid = raw_uuid.lower()
if id_counter[standard_uuid] == 1:
unique_lines.append(logs[standard_uuid])
with open(output_path, 'w', encoding='utf-8') as f:
f.write('\n'.join(map(str, unique_lines)))
if __name__ == "__main__":
import sys
if len(sys.argv) != 2:
print(f"Usage: {sys.argv[0]} input.log")
sys.exit(1)
extract_unique_id_lines(sys.argv[1], "output.txt")
print(f"Unique ID line numbers have been saved")