2013-02-22 6 views
1

Я пытаюсь разобрать следующий формат из журнала Nginx файла:данные Nginx журнала Разбор с пробелами в качестве разделителей

10.0.0.1 [02/Oct/2012:10:21:46 +0000] GET /api/123/test.json?stop=2012-09-29 502 0 

Мой питон скрипт:

#!/usr/bin/env python 

f = file('slow-queries.txt', 'r') 

# iterate over the lines in the file 
for line in f: 
    # split the line into a list of column values 
    columns = line.split(' ') 
    # clean any whitespace off the items 
    # columns = [col.strip() for col in columns] 

    # ensure the column has at least one value before printing 
    if columns: 
     print "first =>", columns[0] # print the first column 
     print "second =>", columns[1] 

В принципе все, что я хочу из журнала файл - это запрос, который был отправлен, поэтому в приведенном выше примере я ищу извлечение /api/123/test.json?stop=2012-09-29

Мой скрипт, похоже, не делает этого, что я делаю неправильно?

ответ

3

Те вкладки, а не пространства:

ip, date, method, path, status, _ = line.split('\t') 
1

То, что вы делаете неправильно использует язык программирования общего назначения, где специализированного языка файл журнала анализатор доступен: AWK;)

awk '{ print $5 }' /path/to/slow-queries.txt 

Конечно, это возможно с помощью python/php/perl/YOUR AD ЗДЕСЬ, но awk всегда будет выполнять их ^^

EDIT: Возможно, даже вывести результаты в новый файл w hich будет использоваться вашими скриптами python:

awk '{ print $5 }' /path/to/slow-queries.txt > /tmp/queries.txt