[MEGOLDVA] Fajlmeret statisztika

Sziasztok!

Van egy rendszerem ahol minden órában létrehozunk egy forgalmi statisztikákat tartalmazó fájlt. Ezeket a fájlokat szinten óránként megvizsgaljuk kiugró méretváltozást keresve. Eddig ezt úgy csináltam, hogy lekérdeztem a fájlok méretét 10 napra visszamenőleg majd ezekből átlagot és standard szórást számoltam. Ha az új fájl méretének szórása nagyobb volt mint a 3x standard szórás akkor kaptunk egy figyelmeztetés.
Néhány napja viszont egy hibából kifolyólag 5x méretű fájlokat generáltunk néhány órán át. Ez hatalmasra növelte a standard szórást és lényegében a teszt nem működik. Szóval újra kell írnom.
Lényegében nem értek a statisztikához így a kérdésem az lenne, hogy milyen eljárást ajánlotok.
Mivel ez csak egy része egy komplett bash scriptnek szeretném bash-ban megvalósítani.

Hozzászólások

Nézegetem a modified Thompson Tau tesztet. De bevallom nem értem a rejection region számítását. Pontosabban ha jól értem a Student t distribution egy táblázatból kell kinézni. Az én esetemben a szabadsági fok 1? Nem nagyon értem ezt a kifejezést.

Oke ezt hoztam eddig ossze, de ez eleg _lassu_. Van valami optimalizacios otlet?


               Old_sizes=`find /san/poptcsv/BEACON/zenpm/live/*${t}* -type f -mtime -10 -ls | awk '{print $7}' `

                # We discard from the Old_sizes the outliner with modifiled Thomson Tau test, the new filtered Old_sizes will be $Old_sizes_filtered
                Old_sizes_filtered=$Old_sizes
                for Old_size in $Old_sizes; do
                        if [ $Change -eq '1' ]; then
                                # The number in the Old_sized_filtered
                                Old_amount=`echo $Old_sizes_filtered | wc -w`
                                # New mean calculate
                                let Sum=`echo $Old_sizes_filtered | sed 's/ /+/g' | bc -l`
                                let New_mean=`echo "scale=0; "$Sum/$Old_amount | bc -l`
                                #Calculate new standard deviation
                                DiffSum=0
                                for n in $Old_sizes_filtered; do
                                        DiffSq=`echo "scale=3; ($n-$New_mean)*($n-$New_mean)" | bc -l`
                                        DiffSum=`echo "scale=3; $DiffSum+$DiffSq" | bc -l`
                                done
                                Deviation=`echo "scale=3; sqrt($DiffSum/$Old_amount)" | bc -l`
                        fi
                        let Change=0
                        # The $Old_size deviation
                        Old_file_deviation=`echo "scale=3; sqrt(($Old_size-$New_mean)*($Old_size-$New_mean))" | bc -l`
                        Old_file_deviation_round=`echo "($Old_file_deviation+0.5)/1" | bc`

                        # Modifiled Thomson Tau test:
                        Tau=`echo "((1.95*$Deviation)+0.5)/1" | bc `
                        if [ $Tau -lt $Old_file_deviation_round ]; then
                                Old_sized_filtered_new=`echo $Old_sizes_filtered | sed "s/$Old_size//g"`
                                Old_sizes_filtered=$Old_sized_filtered_new
                                let Change=1
                        fi
                done

Két kérdés:
- van annak valami akadálya, hogy a statiszikát számító rutin kiegészüljön egy filterrel, amely fájlenevekkel vagy időszakokkal azonosított fájlokat dob ki az összesítésből? - ui. ez volna a leggyorsabb ír a sebre;
- van annak oka, hogy az awk meghívása után visszatérsz shellbe, amelyből processzek rengetegét hívod meg olyan feladatok elvégzésére, amilyenre az awk nem csak hogy képes, de sokkal áttekinthetőbb kóddal képes, mint a shell? - ez ui. a sebességen változtatna drasztikusan.

2- Ehez szerenek okleteket kapni. De hirtelelnjeben nem lattom mit lehet meg awk-ban elvegezni. Lenyegeben minden egyes fajlmeretet egyesevel vizsgalunk, hogy kiugro ertek-e, ha igen akkor ujra kell szamolni az atlagot es a szorast.

Amugy koszonom, most mar sokkal gyorsabb: a megjegyzesed vilagitott ra, hogy nem kell az atlagot es a szorast mindig ujraszamolni, csak, ha kidobunk egy kiugo erteket.