Как я могу отсортировать файл журнала Apache по дате? - PullRequest
16 голосов
/ 15 апреля 2011

У меня есть пара файлов журнала Apache, которые были добавлены вместе, и мне нужно отсортировать их по дате.Они имеют следующий формат:

"www.company.com" 192.168.1.1 [01/Jan/2011:00:04:17 +0000] "GET /foobar/servlet/partner/search/results?catID=1158395&country=10190&id=5848716&order_by=N-T&order_by_dir=-&product=10361996&siteID=1169823&state= HTTP/1.1" 200 10459 0 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)"

Какой лучший способ сделать это в командной строке Linux?

Ответы [ 3 ]

30 голосов
/ 26 мая 2011
#!/bin/sh
if [ ! -f $1 ]; then
    echo "Usage: $0 "
    exit
fi
echo "Sorting $1"
sort -t ' ' -k 4.9,4.12n -k 4.5,4.7M -k 4.2,4.3n -k 4.14,4.15n -k 4.17,4.18n -k 4.20,4.21n $1 > $2
8 голосов
/ 14 марта 2012

Это почти слишком тривиально, чтобы указывать, но просто на случай, если кого-то смущает: для ответа grm технически следует использовать поле № 3, а не 4, чтобы соответствовать точному формату журнала спрашивающего.То есть он должен читать:

    sort -t ' ' -k 3.9,3.12n -k 3.5,3.7M ...

Его ответ верен во всех других отношениях и может использоваться как есть для общего формата журнала.

0 голосов
/ 11 октября 2017

Я понял это с помощью онлайн-примеров, просматривая книгу «Командная строка Linux», справочные страницы и метод проб и ошибок:

sort -k 3.9nb -k 3.5Mb -k 3.2nb [location and name of file]

Символ b вместе с n или M прекратит сортировку при чтении символов, которые не имеют смысла, таких как / и: это облегчает жизнь, когда пробел уже используется в качестве разделителя, и вам все равно придется разделить с помощью:, / и / или любой другой символ, который вы хотите использовать при сортировке.

Приведенный выше скрипт будет сортировать сначала по году, затем по месяцу, а затем по дате. Поместите r рядом со всеми b, чтобы спуститься.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...