2017-11-15 11 views
0

私は以下のように秒単位で数字を持っているファイルがあります、最初の列に数字があるファイルから平均、中央値、平均統計を得るにはどうすればよいですか?

0.01033 
0.003797 
0.02648 
0.007583 
0.007491 
0.028038 
0.012794 
0.00524 
0.019655 
0.019643 
0.012969 
0.011087 
0.044564 

私は「平均」、「平均」、「中央値」を取得することが可能な最善の方法は何を「95パーセンタイル」とこのファイルの "99th percentile"?私はこのファイルを私のLinuxボックスに持っているので、私はそれらの統計を得ることができるいくつかのLinuxコマンドが必要です。あなたが任意の特定のツールにバインドされていない場合は

答えて

2

は、GNU datamash試す - テキストファイルの「コマンドラインstatistical operations」のための便利なツールを。

意味を取得するには、中央値は、95パーセンタイルと最初の列/フィールドの99個の値(ノート、フィールドはデフォルトでTABに区切られている)をパーセンタイル:

$ datamash --header-out mean 1 median 1 perc:95 1 perc:99 1 < file 
mean(field-1) median(field-1) perc:95(field-1) perc:99(field-1) 
0.016128538461538 0.012794 0.0346484 0.04258088 
+0

を使用することができます私のubuntu 14 boにdatamashをインストールするにはどうすればいいですか?バツ? – user1950349

+0

'sudo apt-get install datamash'。 – randomir

+0

'E:パッケージdatamashを見つけることができません'私は現在、ubuntu 14を使用しています。 – user1950349

0

としては非常にある、以前のツールdatamashで説明しました強力なツール! フルawk解決したい場合:平均

を(変数が自動初期化awkによってゼロにされている)

awk '{ sum += $1; n++ } END { if (n > 0) print sum/n; }' 

またはシェバング表記:

#!/bin/awk 

{ sum += $2 } 
END { if (NR > 0) print sum/NR } 

中央値:

#/usr/bin/env awk 
{ 
    count[NR] = $1; 
} 
END { 
    if (NR % 2) { 
     print count[(NR + 1)/2]; 
    } else { 
     print (count[(NR/2)] + count[(NR/2) + 1])/2.0; 
    } 
} 

あなたはそれを使用する前に、ファイルをソートする必要があります。

sort -n data_file | awk -f median.awk 

95パーセンタイル:

sort file -n | awk 'BEGIN{c=0} length($0){a[c]=$0;c++}END{p5=(c/100*5); p5=p5%1?int(p5)+1:p5; print a[c-p5-1]}' 

なく、少なくとも最後に、あなたがミラー https://github.com/johnkerl/miller/tree/v4.5.0

関連する問題