GNU/Linux >> Tutoriales Linux >  >> Linux

utilidad de línea de comandos para imprimir estadísticas de números en Linux

Usando "st" (https://github.com/nferraz/st)

$ st numbers.txt
N    min   max   sum   mean  stddev
10   1     10    55    5.5   3.02765

O:

$ st numbers.txt --transpose
N      10
min    1
max    10
sum    55
mean   5.5
stddev 3.02765

(DESCARGO DE RESPONSABILIDAD:Escribí esta herramienta :))


Para el promedio, la mediana y la desviación estándar, puede usar awk . Esto generalmente será más rápido que R soluciones Por ejemplo, lo siguiente imprimirá el promedio :

awk '{a+=$1} END{print a/NR}' myfile

(NR es un awk variable para el número de registros, $1 significa el primer argumento (separado por espacios) de la línea ($0 sería la línea completa, que también funcionaría aquí pero en principio sería menos segura, aunque para el cálculo probablemente solo tomaría el primer argumento de todos modos) y END significa que los siguientes comandos se ejecutarán después de haber procesado todo el archivo (también se podría haber inicializado a a 0 en un BEGIN{a=0} declaración)).

Aquí hay un awk simple secuencia de comandos que proporciona estadísticas más detalladas (toma un archivo CSV como entrada; de lo contrario, cambie FS ) :

#!/usr/bin/awk -f

BEGIN {
    FS=",";
}
{
   a += $1;
   b[++i] = $1;
}
END {
    m = a/NR; # mean
    for (i in b)
    {
        d += (b[i]-m)^2;
        e += (b[i]-m)^3;
        f += (b[i]-m)^4;
    }
    va = d/NR; # variance
    sd = sqrt(va); # standard deviation
    sk = (e/NR)/sd^3; # skewness
    ku = (f/NR)/sd^4-3; # standardized kurtosis
    print "N,sum,mean,variance,std,SEM,skewness,kurtosis"
    print NR "," a "," m "," va "," sd "," sd/sqrt(NR) "," sk "," ku
}

Es sencillo agregar min/max a este script, pero es igual de fácil canalizar sort &head /tail :

sort -n myfile | head -n1
sort -n myfile | tail -n1

Esto es muy fácil con R. Para un archivo que se ve así:

1
2
3
4
5
6
7
8
9
10

Usa esto:

R -q -e "x <- read.csv('nums.txt', header = F); summary(x); sd(x[ , 1])"

Para obtener esto:

       V1       
 Min.   : 1.00  
 1st Qu.: 3.25  
 Median : 5.50  
 Mean   : 5.50  
 3rd Qu.: 7.75  
 Max.   :10.00  
[1] 3.02765
  • El -q bandera silencia la licencia de inicio de R y la salida de ayuda
  • El -e flag le dice a R que pasará una expresión desde la terminal
  • x es un data.frame - una mesa, básicamente. Es una estructura que acomoda múltiples vectores/columnas de datos, lo cual es un poco peculiar si solo estás leyendo en un solo vector. Esto tiene un impacto en las funciones que puede usar.
  • Algunas funciones, como summary() , acomoda naturalmente data.frames . Si x tenía múltiples campos, summary() proporcionaría las estadísticas descriptivas anteriores para cada uno.
  • Pero sd() solo puede tomar un vector a la vez, por lo que indexo x para ese comando (x[ , 1] devuelve la primera columna de x ). Podrías usar apply(x, MARGIN = 2, FUN = sd) para obtener los SD de todas las columnas.

Linux
  1. Tener una vaca en la línea de comandos de Linux

  2. Encárguese en la línea de comandos de Linux

  3. 15 ejemplos para dominar la historia de la línea de comandos de Linux

  4. Ejemplos de comandos lpr en Linux

  5. Linux:establezca la fecha a través de la línea de comando

Domina la línea de comandos de Linux

Conceptos básicos de la línea de comandos de Linux:sudo

Cómo comprobar las estadísticas de red de Linux desde la línea de comandos

Cómo encontrar la dirección IP en la línea de comandos de Linux

Comprobación de la ortografía en la línea de comandos de Linux

Una guía para el comando vmstat en Linux