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

Alexander Smirnov alexander.v.smirnov на gmail.com
Вт Мар 1 07:40:46 UTC 2011


Alexander Smirnov wrote:
> Тарас Перебейносов wrote:
>> Доброго времени суток!
>>
>> Нужна помощь в написании скрипта, который будет парсить очень большой 
>> лог (> 300 Mb)
>>
>> Лог выглядит так:
>>
>> [25/Feb/2011:11:42:57 +0300];X_HudsonAccesToSVN
>> [25/Feb/2011:11:42:57 +0300];X_HudsonAccesToSVN
>> [25/Feb/2011:11:42:57 +0300];X_HudsonAccesToSVN
>> [25/Feb/2011:11:42:57 +0300];X_HudsonAccesToSVN
>> [25/Feb/2011:11:42:58 +0300];-
>> [25/Feb/2011:11:43:08 +0300];-
>> [25/Feb/2011:11:43:08 +0300];-
>> [25/Feb/2011:11:43:09 +0300];-
>> [25/Feb/2011:11:43:09 +0300];Trofimov
>> [25/Feb/2011:11:43:19 +0300];-
>>
>> На выходе нужно получить файл, в котором будет содержаться:
>> 25/Feb/2011;X_HudsonAccesToSVN
>> 25/Feb/2011;Trofimov
>>
>> Т.е. нужно получить список юзеров за каждый день, без повторений и 
>> пустых юзеров (-).
>> Лог реально большой, и это тоже надо учесть.
>>
>> Я пока только начинаю писать скрипты на bash, пока не особо умею 
>> пользоваться awk и иже с ними, поэтому буду благодарен любым советам 
>> и подсказкам
>
>
> $ awk -F ";" '!/\[.*\];-$/{print $2}' <filename> | sort -u
>
>
>
>
вот еще вариант без пайпа

$ awk -F ";" '!/\[.*\];-$/{a[$2]=""} END{ for (b in a) {print b}}' 
<filename>

да, и кстати 300Мб - это не то что называется "реально большой лог" :)
удачи в освоении авка.



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