#!/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:
Post Comments (Atom)
No comments:
Post a Comment