[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