GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Befehlszeilenprogramm zum Drucken von Zahlenstatistiken unter Linux

Verwenden von „st“ (https://github.com/nferraz/st)

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

Oder:

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

(HAFTUNGSAUSSCHLUSS:Ich habe dieses Tool geschrieben :))


Für den Durchschnitt, den Median und die Standardabweichung können Sie awk verwenden . Dies ist im Allgemeinen schneller als R Lösungen. Im Folgenden wird beispielsweise der Durchschnitt ausgegeben :

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

(NR ist ein awk Variable für die Anzahl der Datensätze, $1 bedeutet das erste (durch Leerzeichen getrennte) Argument der Zeile ($0 wäre die ganze Zeile, die auch hier funktionieren würde, aber im Prinzip weniger sicher wäre, obwohl es für die Berechnung wahrscheinlich sowieso nur das erste Argument nehmen würde) und END bedeutet, dass die folgenden Befehle ausgeführt werden, nachdem die gesamte Datei verarbeitet wurde (man hätte auch a initialisieren können bis 0 in einem BEGIN{a=0} Erklärung)).

Hier ist ein einfaches awk Skript, das detailliertere Statistiken liefert (nimmt eine CSV-Datei als Eingabe, ändern Sie andernfalls 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 ist einfach, min/max zu diesem Skript hinzuzufügen, aber es ist genauso einfach, sort zu pipen &head /tail :

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

Mit R ist das ein Kinderspiel. Für eine Datei, die so aussieht:

1
2
3
4
5
6
7
8
9
10

Verwenden Sie dies:

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

Um dies zu erhalten:

       V1       
 Min.   : 1.00  
 1st Qu.: 3.25  
 Median : 5.50  
 Mean   : 5.50  
 3rd Qu.: 7.75  
 Max.   :10.00  
[1] 3.02765
  • Die -q Flag unterbindet die Startup-Lizenzierung und die Hilfeausgabe von R
  • Die -e Flag teilt R mit, dass Sie einen Ausdruck vom Terminal übergeben werden
  • x ist ein data.frame - im Grunde ein Tisch. Es ist eine Struktur, die mehrere Vektoren/Datenspalten aufnimmt, was ein wenig eigenartig ist, wenn Sie nur einen einzelnen Vektor einlesen. Dies hat Auswirkungen darauf, welche Funktionen Sie nutzen können.
  • Einige Funktionen, wie summary() , passen natürlich data.frames . Wenn x hatte mehrere Felder, summary() würde die obigen beschreibenden Statistiken für jeden bereitstellen.
  • Aber sd() kann jeweils nur einen Vektor nehmen, weshalb ich x indiziere für diesen Befehl (x[ , 1] gibt die erste Spalte von x zurück ). Sie könnten apply(x, MARGIN = 2, FUN = sd) verwenden um die SDs für alle Spalten zu erhalten.

Linux
  1. 8 Tipps für die Linux-Kommandozeile

  2. Haben Sie eine Kuh an der Linux-Befehlszeile

  3. Boxen Sie sich auf der Linux-Befehlszeile ein

  4. lpr-Befehlsbeispiele unter Linux

  5. Linux:Datum über die Befehlszeile festlegen

Meistern Sie die Linux-Befehlszeile

Grundlagen der Linux-Befehlszeile:sudo

So überprüfen Sie die Linux-Netzwerkstatistik über die Befehlszeile

So finden Sie die IP-Adresse in der Linux-Befehlszeile

Rechtschreibprüfung in der Linux-Befehlszeile

Eine Anleitung zum vmstat-Befehl in Linux