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

#!/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 <
[email protected]> написал:

> 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
> [email protected]
> https://lists.ubuntu.com/mailman/listinfo/ubuntu-ru
>
-- 
ubuntu-ru mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-ru

Дати відповідь електронним листом