Сделал скрипт для анализа довольно большого лога (>250Mb).
Лог представляет из себя файл со строками вида:
Затем подсчитывает в файле /root/users-count/out.csv количество пользователей за каждый день и формирует файл "users_comp_final.csv" со строками вида: "25/Feb/2011;128" (дата, количество пользователей)
Для исходного лога, размером 251M, скрипт выполняется порядка 2х минут на довольно мощном сервере, используя около 150М ОЗУ.
И сам скрипт:
В файл out.csv пишутся строки вида:
Лог представляет из себя файл со строками вида:
[25/Feb/2011:22:53:47 +0300];User1 [25/Feb/2011:22:53:52 +0300];- [25/Feb/2011:22:53:52 +0300];User2Скрипт обрабатывает лог /var/log/httpd/users.csv. В файл /root/users-count/out.csv записывает строки вида: "25/Feb/2011;user1" исключая пустых пользователей "-" и повторы пользователей в течении дня.
Затем подсчитывает в файле /root/users-count/out.csv количество пользователей за каждый день и формирует файл "users_comp_final.csv" со строками вида: "25/Feb/2011;128" (дата, количество пользователей)
Для исходного лога, размером 251M, скрипт выполняется порядка 2х минут на довольно мощном сервере, используя около 150М ОЗУ.
И сам скрипт:
#!/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"
В файл out.csv пишутся строки вида:
24/Feb/2011;user1 25/Feb/2011;user2 25/Feb/2011;user1а в итоговом файле users_comp_final.csv:
23/Feb/2011;53 24/Feb/2011;129 25/Feb/2011;128
Групповое переименование файлов
cnt=0; for file in ./*ppt; \ do cnt=$(($cnt+1));\ newfile=$cnt.ppt; mv "$PWD/$file" "$PWD/$newfile"; \ done