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
-qflag potlačí licencování spouštění R's a výstup nápovědy-eflag říká R, že budete předávat výraz z termináluxjedata.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. Pokudxmě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č indexujixpro tento příkaz (x[ , 1]vrátí první sloupecx). Můžete použítapply(x, MARGIN = 2, FUN = sd)získat SD pro všechny sloupce.