[Linux-Biella] Ancora script: viva awk
CIARROCCHI Paolo
linux@bilug.linux.it
Thu, 7 Mar 2002 08:56:44 +0100
>> Grazie ora funziona.
>> Non volevo infastidire...
>
>Funziona e se non ho capito male ti stampa il totale. Ma tu volevi la media
o
>il totale? Forse sono stato fuorviato dal nome media.c
>
>$ cat media.awk
>#!/bin/awk -f
>{tot+=$1}; END {print tot/NR};
>
>Credo che il mio sia il piu' corto di quelli proposti e accetta imput dallo
>stdin. Bisogna solo stare attenti che non ci siano righe vuote, lascio come
>esercizio l'eliminazione delle righe vuote qualora ci siano ;-).
Media.c funziona (con la visione di Linus, cioe' si compila :-), in effetti
mi fa la somma
dei valori, ma calcolare la media e' un attimo, un contatore in piu' e una
divisione alla fine:
#include <stdio.h>
int main ()
{
FILE *fd;
float currfloat = 0, total = 0, line = 0;
fd = fopen ("dati.txt", "r");
while (!feof(fd))
{
fscanf (fd, "%f\n", &currfloat);
total += currfloat;
line ++;
}
printf ("%f", total/line);
}
Il tuo dovrebbe essere perfetto,
ecco quello che facevo:
#/bin/bash
for i in `seq 1 1 10`;
do ./dbench 10 >> `uname -r`.tmp
echo .
done
grep Th `uname -r`.tmp >`uname -r`.log
rm -rf `uname -r`.tmp
Questo script esegue dieci volte dbenche e genera un file di log,
passo successivo e' calcorlarno la media.
Questo mi estrae il dato che mi serve:
#/bin/awk
BEGIN { FS = " " }
{ print $2 }
e con un altro script avrei dovuto calcolarne la media.
Quindi, mofico il tuo script cosi:
>#!/bin/awk -f
>{tot+=$2}; END {print tot/NR};
Proviamo:
Administrator@OIVT444P /cygdrive/log
$ ./media.awk 2.4.17.log
25.0515
Ottimo!
Ora devo solo inserirlo nel primo scritp e accodare la media al file di log!
Grazie mille!
--
Paolo