
He creado un script que ve un archivo de registro y realiza búsquedas durante una cantidad específica de milisegundos/segundos. He creado algo que ve el valor mínimo y máximo; sin embargo, necesito encontrar el promedio de la lista.
logdir_8080='/opt/product/apachetomcat/8.5.5_8080/logs'
cd "$logdir_8080"
get_file=`ls -rt localhost_access_log.*.txt|tail -1`
cat $get_file | tail -1000 | grep "objectId" | awk -F 'HTTP/1.1" 200' '{
print $2}'|awk -F' ' '{ print $2 }' | sort - n>/opt/product/apachetomcat/apm/epagent/epaplugins/centrica/correspondence_log_files/8080.txt
valor_mínimo:
cat /opt/product/apachetomcat/apm/epagent/epaplugins/centrica/correspondence_log_files/8080.txt|head -1
valor máximo:
cat /opt/product/apachetomcat/apm/epagent/epaplugins/centrica/correspondence_log_files/8080.txt|tail -1
Idea de la lista:
233
249
283
283
302
303
332
333
643
851
965
965
972
1022
1135
1182
1213
1232
1264
1273
1390
1403
1414
1429
1474
1537
1540
1543
1545
1556
1565
1566
1577
1589
1591
1599
1602
1621
1622
1647
1653
1705
1740
1772
1774
1933
1935
1983
1990
¿Cómo sacar el promedio?
Respuesta1
Si lo único que hay en su archivo son números, puede usar un solo comando awk para obtenerlo todo.
awk 'BEGIN {themin=10000000; themax=0; thecount=0; thesum=0}
{for (i=1; i<=NF; i++) {
thesum += $i;
thecount++;
if ($i < themin) {themin = $i}
if ($i > themax) {themax = $i}
}}
END {
printf("The min is %d\nThe max is %d\nThe sum is %d\nThe total number of items is %d\nThe average of those items is %d\n", themin, themax, thesum, thecount, int(thesum/thecount))
}' _file_
Lo separé para que puedas ver las diferentes secciones.
BEGIN simplemente inicializa todas las variables que se utilizarán. La variable, themin, se puede establecer en cualquier valor grande que desee, siempre que sea mayor que cualquier valor en su archivo.
La parte media simplemente recorre cada línea y cada campo de esa línea. Se trata de resumir los números y contarlos todos para poder realizar una división simple al final. Las dos declaraciones if recopilan sus valores mínimo y máximo.
El FINAL imprime toda la información relevante, incluidos el mínimo, el máximo y el promedio.
Espero que esto ayude.
Respuesta2
No es necesario escribir sus propias soluciones para problemas que ya tienen soluciones espléndidas. Después de todo, preguntaste en SuperUser y no en StackOverflow.
Por ejemplo use GNUdatamash
$ datamash min 1 max 1 mean 1 < yourFile
233 1990 1272.0408163265
o utilice las herramientas del paquetenum-utils
$ numbound -l yourFile
233
$ numbound yourFile
1990
$ numaverage yourFile
1272.04081632653