Полезные рецепты на bash

cat /opt/nginx/logs/access.log | grep "Jan/2013:16:" | grep 'page.html ' | grep -o -P "\d+\.\d+$" | awk '{ sum+=$1;cnt+=1} END {print sum/cnt}'
Список файлов содержащий 0 в строке
find /home/ -name q.txt -exec grep -HlP "^0" {} \;
подсчет строк по шаблону возможно есть вариат проще на awk
zcat /opt/nginx/logs/access.log.1.gz | grep -P 'app_id=' | perl -ne 'if(/app_id=(\w+)/){ $a->{$1} ++; }; END{ foreach $i (keys(%{$a})){ printf("%07d - % 16s\n", $a->{$i}, $i); }}' | sort
Среднее время страницы и прочая стат инфа
zcat /opt/nginx/logs/access.log.1.gz | grep -P '2013:0[2-6]' | perl -ne 'if(/GET \/(.+) HTTP.*(\d+\.\d+)$/){ $k = substr($u,0, 12); if(!$a->{$k}){$a->{$k}={};}else{ $a->{$k}->{cnt}++ }; if($2 > 5 ){ $u=$1; $t=$2; $a->{$k}->{cnt_long}++; if($t>$a->{$k}->{cnt_long}){$a->{$k}->{max}=$t} }}; END{ foreach $i (keys(%{$a})){ printf("%07d - %07d - %07f - %07f % 16s\n", $a->{$i}->{cnt}, $a->{$i}->{'cnt_long'}, ($a->{$i}->{'cnt_long'}/$a->{$i}->{cnt} *100), $a->{$i}->{'max'} , $i); }}' | sort


request-log-analyzer and log passenger


Проблема заключается в том что production.log пишут сразу несколько процессов, что приводит к его мешанине. Решение: отсортировать вручную
for i in $(cat /tmp/1.log | awk '{ if ( a[$1]!=1){ a[$1]=1; print $1}}' | grep -oP '\d+' ); do grep "\[$i\]" /tmp/1.log > /tmp/b_$i.log ; done ; cat /tmp/b_*.log > /tmp/new.log

Вам может понравиться