Apache logo custom statistika
Universitete gavau dar vieną užduotį, kurią atlikti reikėjo su bash. Reikėjo susigalvoti 5 statistikos pjūvius, kuriais būtų pateikiama tam tikra informacija. Kažkaip viską atidėliojau ir apie terminą sužinojau tik likus 4 valandoms iki jo pabaigos. Kaip bebūtų apmaudu scenarijų nusiunčiau pavėlavęs 20 minučių, todėl gavau nulį balų
. Na, bet ne pasaulio pabaiga.
-
#!/bin/bash
-
clear
-
-
function help() {
-
echo "Naudojimas: ./apache-stats.sh -f inputFile -s statistikos_id"
-
echo "1 - visi unikalus ip"
-
echo "2 - aktyviausiu desimtukas"
-
echo "3 - gautu HTTP statusu sarasas ir kiekis"
-
echo "4 - statistikos, esancios faile, periodas"
-
echo "5 - populiariausia minute"
-
}
-
-
# tikrinam ar visi raktai ir parametrai yra
-
if [ $# -ne 4 ]; then
-
help
-
exit
-
fi
-
-
if [ $1 == "-f" ]; then
-
inputFile=$2;
-
elif [ $3 == "-f" ]; then
-
inputFile=$4;
-
else
-
help
-
exit
-
fi
-
-
# tikrinam ar failas egzistuoja
-
if [ ! -e "$inputFile" ]; then
-
echo "$inputFile neegzistuoja."
-
exit
-
#tikrinam ar readable
-
elif [ ! -r "$inputFile" ]; then
-
echo "$inputFile failas neturi read leidimu."
-
exit
-
#tikrinam ar ne direktorija $1
-
elif [ ! -f "$inputFile" ]; then
-
echo "$inputFile yra katalogas. Turi buti failas."
-
exit
-
fi
-
-
if [ $1 == "-s" ]; then
-
stats_id=$2;
-
elif [ $3 == "-s" ]; then
-
stats_id=$4;
-
else
-
help
-
exit;
-
fi
-
-
# pasiimam apache logą ir nukerpam pirmą eilutę
-
dataManip=`sed /newsyslog/d $inputFile`;
-
-
if [ $stats_id -eq 1 ]; then
-
# ieskosim unikaliu ip
-
echo "Unikalus IP"
-
# awk print komanda sukapoja eilutę pagal tarpus ir paima pirmąjį stulpelį
-
# sort surūšiuoja stulpelį
-
# uniq išrenka tik unikalias eilutes. pastaba: prieš vykdant uniq būtina surūšiuoti eilutes,
-
# nes kitu atveju uniq veikia nekorektiškai
-
out=`echo "$dataManip" | awk ‘{print $1}’ | sort | uniq`
-
echo "$out"
-
elif [ $stats_id -eq 2 ]; then
-
# aktyviausiu ip desimtukas
-
echo "Kiekis | IP"
-
# uniq raktas -c prideda vieną stulpelį, kuriam yra skaičius nurodantis, kiek kartų
-
# kiekviena eilutė dubliavosi
-
# sort -r raktas liepia surūšiuoti atvirkštine tvarka, raktas -g liepia rūšiuoti skaičius, taip
-
# kaip juos rušiuoja žmonės, o ne pagal pirmą simbolį
-
# head -n 10 paima pirmas 10 rezultato eilučių
-
out=`echo "$dataManip" | awk ‘{print $1}’ | sort | uniq -c | sort -rg | head -n 10`
-
echo "$out"
-
elif [ $stats_id -eq 3 ]; then
-
# pranesimai
-
echo "Kiekis | HTTP kodas"
-
# awk šioje vietoje bando įvykdyti regexp‘ą, kuris suskaldytų eilutę pagal kabutes.
-
# nelabai korektiškai veikia, nes regexp’as man visada buvo tankus miškas
-
# print $0 spausdina visą eilutę
-
# print $6 spausdina prieš tai gauto rezultato šeštąjį stulpelį
-
# visa kita jau aprašyta aukščiau
-
out=`
-
echo "$dataManip" | awk ‘{gsub(/"[^"]*"/,"",$0); print $0}’ | awk ‘{print $6}’ | sort | uniq -c | sort -rg | head -n 7
-
`
-
echo "$out"
-
elif [ $stats_id -eq 4 ]; then
-
# substr funkcija paima eilutę ir atkerpa dalį jos
-
out=`
-
echo "$dataManip" | awk ‘{print substr($4, 2, length($4)-1);}’ | sort
-
`
-
nuo=$(echo "$out" | head -n 1);
-
# tail komanda paima tam tikra eilučių kiekį iš rezultatų pabaigos
-
iki=$(echo "$out" | tail -n 1);
-
echo "Statistika rodoma nuo $nuo iki $iki"
-
elif [ $stats_id -eq 5 ]; then
-
# kuria minute buvo jungtasi daugiausiai kartu
-
# sed komanda suranda dvitaškius ir pakeičia juos tarpais, taip paruošdamas dirvą awk
-
# komandai print
-
echo "Kiekis | Minute"
-
out=`
-
echo "$dataManip" | awk ‘{print $4}’ | sed ’s/:/ /g’ | awk ‘{print $3}’ | sort -rg | uniq -c | head -n 1
-
`
-
echo "$out"
-
fi
Na, ne perliukas, bet manau vis tiek kam nors bus naudinga.

November 23rd, 2007 at 12:17
ech tas Bukauskas
November 23rd, 2007 at 12:21
Aš sakyčiau griežtas, bet teisingas
. Rašiau pas jį kursinį, viskas normaliai. Manau ir dėl bakalaurinio eisiu pas jį 
November 23rd, 2007 at 12:30
O tai tu pala 4akursis?
November 23rd, 2007 at 12:34
Jap. Neturėjau Unix’o 3-iam kurse, tai dabar pasirinkau
November 23rd, 2007 at 12:36
Tai mes dar ir bendrakursiai reiškias
et… aš dar univere šiais metais nebuvau… 
November 23rd, 2007 at 12:49
Visai įmanoma. Aš tai po grupių išskirstymo trečiam kurse, net ne visus grupiokus pažįstu, o ką jau kalbėt apie kursiokus
. Universitete irgi tik epizodiškai pasirodau, bet kadangi užduotis darau pats, tai gaunu ganėtinai daug. Šiaip esu patenkintas MIF’u, nors daug kas ir rėkia, kad lieva lieva, nieko neišmoko. Kas nenori mokytis, tas ir neišmoksta.
November 23rd, 2007 at 13:00
Aš tiesa pasakius, vienas iš tų, kur nieko neišmokai
praktiškai nieko naujo nepasakė
viskam yra google. amen 

ps. tu kurioj grupėj?
November 23rd, 2007 at 13:01
Beje pasiredaguok savo templeitus ale Single.php
dabar viršuj tas “Travelogue Entry” kažkaip keistas žiūrisi 
November 23rd, 2007 at 13:13
Tai aišku viskas yra google, bet reikia sugalvot tai susirasti. O universitetas priverčia tave pasidomėt tam tikrais klausimais ir pasigilinti daugiau negu paviršutiniškai. Long live MIF. huray huray!