uso sumar primera ordenar numero mostrar mayor filtrar columnas columna básico bash sed awk median

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.