GNU/Linux >> Znalost Linux >  >> Linux

nástroj příkazového řádku pro tisk statistik čísel v linuxu

Pomocí „st“ (https://github.com/nferraz/st)

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

Nebo:

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

(ODPOVĚDNOST:Tento nástroj jsem napsal já :))


Pro průměr, medián a směrodatnou odchylku můžete použít awk . To bude obecně rychlejší než R řešení. Například následující vytiskne průměr :

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

(NR je awk proměnná pro počet záznamů, $1 znamená první (mezery oddělený) argument řádku ($0 by byl celý řádek, který by zde také fungoval, ale v zásadě by byl méně bezpečný, i když pro výpočet by stejně pravděpodobně vzal jen první argument) a END znamená, že následující příkazy budou provedeny po zpracování celého souboru (je možné také inicializovat a na 0 v BEGIN{a=0} prohlášení)).

Zde je jednoduchý awk skript, který poskytuje podrobnější statistiky (jako vstup bere soubor CSV, jinak změňte 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
}

Do tohoto skriptu je snadné přidat min/max, ale stejně snadné je použít sort &head /tail :

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

S R je to hračka. Pro soubor, který vypadá takto:

1
2
3
4
5
6
7
8
9
10

Použijte toto:

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

Chcete-li to získat:

       V1       
 Min.   : 1.00  
 1st Qu.: 3.25  
 Median : 5.50  
 Mean   : 5.50  
 3rd Qu.: 7.75  
 Max.   :10.00  
[1] 3.02765
  • -q flag potlačí licencování spouštění R's a výstup nápovědy
  • -e flag říká R, že budete předávat výraz z terminálu
  • x je data.frame - v podstatě stůl. Je to struktura, která pojme více vektorů/sloupců dat, což je trochu zvláštní, pokud čtete pouze v jediném vektoru. To má vliv na to, které funkce můžete používat.
  • Některé funkce, například summary() , přirozeně se přizpůsobí data.frames . Pokud x měl více polí, summary() by pro každý poskytl výše uvedené popisné statistiky.
  • Ale sd() může mít vždy pouze jeden vektor, což je důvod, proč indexuji x pro tento příkaz (x[ , 1] vrátí první sloupec x ). Můžete použít apply(x, MARGIN = 2, FUN = sd) získat SD pro všechny sloupce.

Linux
  1. Mít krávu na příkazovém řádku Linuxu

  2. Jak restartovat Linux pomocí příkazového řádku

  3. Příklady příkazů lpr v Linuxu

  1. 8 tipů pro příkazový řádek Linuxu

  2. Přihlaste se do příkazového řádku Linuxu

  3. 15 Příklady pro zvládnutí historie příkazového řádku Linuxu

  1. Linux_Logo – Nástroj příkazového řádku pro tisk barevných log ANSI linuxových distribucí

  2. Příklady příkazů awk v Linuxu

  3. Linux:nastavte datum pomocí příkazového řádku