GNU/Linux >> Linux Esercitazione >  >> Linux

utilità della riga di comando per stampare le statistiche dei numeri in 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

Oppure:

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

(DISCLAIMER:ho scritto io questo strumento :))


Per la media, la mediana e la deviazione standard puoi utilizzare awk . Questo sarà generalmente più veloce di R soluzioni. Ad esempio, quanto segue stamperà la media :

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

(NR è un awk variabile per il numero di record, $1 indica il primo argomento (separato da spazi) della riga ($0 sarebbe l'intera riga, che funzionerebbe anche qui ma in linea di principio sarebbe meno sicura, anche se per il calcolo probabilmente prenderebbe comunque solo il primo argomento) e END significa che i seguenti comandi verranno eseguiti dopo aver elaborato l'intero file (si potrebbe anche aver inizializzato a a 0 in un BEGIN{a=0} istruzione)).

Ecco un semplice awk script che fornisce statistiche più dettagliate (prende un file CSV come input, altrimenti cambia 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
}

È semplice aggiungere min/max a questo script, ma è altrettanto facile reindirizzare sort &head /tail :

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

Questo è un gioco da ragazzi con R. Per un file simile a questo:

1
2
3
4
5
6
7
8
9
10

Usa questo:

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

Per ottenere questo:

       V1       
 Min.   : 1.00  
 1st Qu.: 3.25  
 Median : 5.50  
 Mean   : 5.50  
 3rd Qu.: 7.75  
 Max.   :10.00  
[1] 3.02765
  • Il -q flag sopprime la licenza di avvio di R e l'output della guida
  • Il -e flag dice a R che passerai un'espressione dal terminale
  • x è un data.frame - un tavolo, in pratica. È una struttura che ospita più vettori/colonne di dati, il che è un po' strano se stai solo leggendo in un singolo vettore. Ciò ha un impatto sulle funzioni che puoi utilizzare.
  • Alcune funzioni, come summary() , naturalmente ospitare data.frames . Se x aveva più campi, summary() fornirebbe le statistiche descrittive di cui sopra per ciascuno.
  • Ma sd() può accettare solo un vettore alla volta, motivo per cui indico x per quel comando (x[ , 1] restituisce la prima colonna di x ). Potresti usare apply(x, MARGIN = 2, FUN = sd) per ottenere gli SD per tutte le colonne.

Linux
  1. 8 suggerimenti per la riga di comando di Linux

  2. Avere una mucca sulla riga di comando di Linux

  3. 15 esempi per padroneggiare la cronologia della riga di comando di Linux

  4. Esempi di comandi awk in Linux

  5. Linux:imposta la data tramite la riga di comando

Padroneggia la riga di comando di Linux

Nozioni di base sulla riga di comando di Linux:sudo

Come controllare le statistiche di rete Linux dalla riga di comando

Come trovare l'indirizzo IP nella riga di comando di Linux

Controllo dell'ortografia nella riga di comando di Linux

Una guida al comando vmstat in Linux