Re: bash парсинг лога

Тарас Перебейносов taras.perebeynosov на gmail.com
Пт Фев 25 17:19:39 UTC 2011


Спасибо!
Пример не заработал, там нужно как минимум вместо () использовать \( \)
чтобы флаги отметить. Но, это дало мне точку опоры и я поправил под свои
нужды)))

#!/bin/bash
echo "`date` Script started"
logfile="/var/log/httpd/users.csv"
LOGFILE_OUT="/root/users-count/out.csv"

# Remove users "-" and compact log
grep -v "];-" $logfile | sed -e
's/^\[\([0-9]\{2\}\/[A-Z][a-z]\{2\}\/[0-9]\{4\}\).*;\(.*\)$/\1;\2/'| sort
|uniq > $LOGFILE_OUT

# Counting users
file="/root/users-count/out.csv"
outputFile="/root/users-count/users_comp_final.csv"
dates=`cut --delimiter=";" -f1 $file | sort| uniq`

for i in $dates
do
        echo "$i;$(grep "$i" $file | wc -l)" >> $outputFile
done

echo "`date` Script finished. Check $LOGFILE_OUT and $outputFile"

Выполняется на серваке 2 минуты, жрет 150М при обработке лога в 250М.

25 февраля 2011 г. 17:36 пользователь Dmitry Agafonov <
agafonovdmitry на gmail.com> написал:

> 300 мб - сущая мелочь :)
>
> Я бы написал как-то так (не проверял):
> grep -v "];-" LOGFILE | sed
> "s/^\[([0-9]{1,2}/[A-Z][a-z]{2}/[0-9]{4}):.+\];(.+)$/\1;\2" | sort |
> uniq > LOGFILE_OUT
>
> Интуитивно - потребуется около 500 мб озу.
>
> Но таки bash тут не используется, ну разве для работы трубопроводчиком :)
>
> --
> Dmitry Agafonov ~ http://agafonov.pp.ru/
> --
> ubuntu-ru mailing list
> ubuntu-ru на lists.ubuntu.com
> https://lists.ubuntu.com/mailman/listinfo/ubuntu-ru
>
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <https://lists.ubuntu.com/archives/ubuntu-ru/attachments/20110225/377c66bc/attachment.html>


Подробная информация о списке рассылки ubuntu-ru