#!/usr/local/bin python
"""
This script is used to analyze log file
"""
import os.path, time, re, getopt, sys, fnmatch
verbose = False
def say(s):
   if verbose:
       print s
def searchPattern(args, dirname, filenames):
   file_pattern, text_pattern, count = args
   say("Processing directory %s now" % (dirname))
   say("File pattern: %s" % (file_pattern))
   say("Text pattern: %s" % (text_pattern))
   say("Count only: %s" % (count))
   counts = {}
   def incMatchCount(matched):
       counts[matched] = counts.get(matched, 0) + 1
  
   compiled_pattern = re.compile(text_pattern)
   for filename in fnmatch.filter(filenames, file_pattern):
       say("Processing file %s now" % (filename))
       log = open(os.path.join(dirname, filename), 'r')
       for line in log:
           m = re.match(compiled_pattern, line)
           if m:
               if count:
                   incMatchCount(m.group(1))
               else:
                   print ';;'.join(m.groups())
       if count:
           for matched in counts.keys():
               print " -> ".join([matched, str(counts[matched])])
if __name__ == '__main__':
   def usage():
       print "Usage:"
       print "python find_pattern.py -d <root_dir> -f <file_pattern> -p <search_pattern> -c -v"
   try:                               
       opts, args = getopt.getopt(sys.argv[1:], "d:f:p:cv")
   except getopt.GetoptError:
       usage()
       sys.exit(2)                    
   count = False
   root_dir = '.'
   file_pattern = '*.log'
   text_pattern = '(.+)'
   for opt, arg in opts:
       if opt in ("-v"):
           verbose = True
       elif opt in ("-c"):
           count = True
       elif opt in ("-d"):
           root_dir = arg
       elif opt in ("-f"):
           file_pattern = arg
       elif opt in ("-p"):
           text_pattern = arg
   os.path.walk(root_dir, searchPattern, (file_pattern, text_pattern, count))
2008-02-02
Search text pattern in log files
Subscribe to:
Comments (Atom)