bash - sumar - mediana de la columna con awk
sumar columna awk (3)
Con awk
tienes que almacenar los valores en una matriz y calcular la mediana al final, asumiendo que miramos la primera columna:
sort -n file | awk '' { a[i++]=$1; } END { print a[int(i/2)]; }''
Claro, para la computación mediana real haga el redondeo como se describe en la pregunta:
sort -n file | awk '' { a[i++]=$1; }
END { x=int((i+1)/2); if (x < (i+1)/2) print (a[x-1]+a[x])/2; else print a[x-1]; }''
¿Cómo puedo utilizar AWK para calcular la mediana de una columna de datos numéricos?
Puedo pensar en un algoritmo simple pero no puedo programarlo:
Lo que tengo hasta ahora es:
sort | awk ''END{print NR}''
Y esto me da la cantidad de elementos en la columna. Me gustaría utilizar esto para imprimir una fila determinada (NR/2)
. Si NR/2
no es un número entero, redondeo al entero más cercano y esa es la mediana; de lo contrario, tomo el promedio de (NR/2)+1
y (NR/2)-1
.
Este programa awk
supone una columna de datos ordenados numéricamente:
#/usr/bin/env awk
{
count[NR] = $1;
}
END {
if (NR % 2) {
print count[(NR + 1) / 2];
} else {
print (count[(NR / 2)] + count[(NR / 2) + 1]) / 2.0;
}
}
Uso de muestra:
sort -n data_file | awk -f median.awk
Esta respuesta basada en AWK a una pregunta similar en unix.stackexchange.com da los mismos resultados que Excel para calcular la mediana.