Поиск по этому блогу

Bash-scripting

Сделал скрипт для анализа довольно большого лога (>250Mb).
Лог представляет из себя файл со строками вида:
[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

Мой список блогов