GNU/Linux >> Tutoriels Linux >  >> Linux

utilitaire de ligne de commande pour imprimer des statistiques de nombres sous Linux

Utilisation de "st" (https://github.com/nferraz/st)

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

Ou :

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

(AVIS DE NON-RESPONSABILITÉ :j'ai écrit cet outil :))


Pour la moyenne, la médiane et l'écart type, vous pouvez utiliser awk . Ce sera généralement plus rapide que R solutions. Par exemple, ce qui suit imprimera la moyenne :

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

(NR est un awk variable pour le nombre d'enregistrements, $1 signifie le premier argument (séparé par des espaces) de la ligne ($0 serait la ligne entière, qui fonctionnerait également ici mais serait en principe moins sûre, bien que pour le calcul, elle ne prendrait probablement que le premier argument de toute façon) et END signifie que les commandes suivantes seront exécutées après avoir traité tout le fichier (on aurait aussi pu initialiser a à 0 dans un BEGIN{a=0} déclaration)).

Voici un simple awk script qui fournit des statistiques plus détaillées (prend un fichier CSV en entrée, sinon changez 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
}

Il est simple d'ajouter min/max à ce script, mais il est aussi facile de diriger sort &head /tail :

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

C'est un jeu d'enfant avec R. Pour un fichier qui ressemble à ceci :

1
2
3
4
5
6
7
8
9
10

Utilisez ceci :

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

Pour obtenir ceci :

       V1       
 Min.   : 1.00  
 1st Qu.: 3.25  
 Median : 5.50  
 Mean   : 5.50  
 3rd Qu.: 7.75  
 Max.   :10.00  
[1] 3.02765
  • Le -q flag supprime la licence de démarrage de R et la sortie d'aide
  • Le -e flag indique à R que vous allez passer une expression depuis le terminal
  • x est un data.frame - une table, essentiellement. C'est une structure qui accueille plusieurs vecteurs/colonnes de données, ce qui est un peu particulier si vous ne lisez qu'un seul vecteur. Cela a un impact sur les fonctions que vous pouvez utiliser.
  • Certaines fonctions, comme summary() , accueillent naturellement data.frames . Si x avait plusieurs champs, summary() fournirait les statistiques descriptives ci-dessus pour chacun.
  • Mais sd() ne peut prendre qu'un seul vecteur à la fois, c'est pourquoi j'indexe x pour cette commande (x[ , 1] renvoie la première colonne de x ). Vous pouvez utiliser apply(x, MARGIN = 2, FUN = sd) pour obtenir les SD de toutes les colonnes.

Linux
  1. 8 conseils pour la ligne de commande Linux

  2. Avoir une vache à la ligne de commande Linux

  3. Enfermez-vous sur la ligne de commande Linux

  4. Comment redémarrer Linux en utilisant la ligne de commande

  5. Exemples de commandes lpr sous Linux

Maîtrisez la ligne de commande Linux

Principes de base de la ligne de commande Linux :sudo

Comment vérifier les statistiques du réseau Linux à partir de la ligne de commande

Comment trouver une adresse IP dans la ligne de commande Linux

Vérification de l'orthographe dans la ligne de commande Linux

Un guide de la commande vmstat sous Linux