#!/usr/bin/env python from __future__ import print_function import sys import os import re import datetime import gzip import fileinput import string import random def check_filename(fname): if not os.path.exists(fname): return fname new_fname = fname + "." + "".join(random.sample(string.lowercase, 6)) print("Warning: %s exists, nor overwriting, writing to %s instead" % (fname, new_fname)) return new_fname def main(file_names): fi = fileinput.FileInput(file_names, openhook=fileinput.hook_compressed) f = None last_date = None for line in fi: match = re.match(r".+?\[(.+?):.+?\]", line) try: date = match.group(1) if date != last_date: last_date = date dt = datetime.datetime.strptime(date, "%d/%b/%Y") fname = check_filename(dt.strftime("access.log-%Y%m%d.gz")) print(fname) if f is not None: f.close() #f = open(fname, "w") f = gzip.GzipFile(fname, "w") f.write(line) except: print("Error context: %s:%d\n%s" % (fi.filename(), fi.filelineno(), line)) raise f.close() if __name__ == "__main__": main(sys.argv[1:])