2012-02-17 4 views
2

私は統合テストを実行し、実行時間のリストを返しました。私は平均ではなくその結果セットから90%の分布値を見つける必要があります。これは、ユーザーが90%の時間に遭遇するものを表しているためです。そこにはLinuxコマンドラインがありますか?そうでない場合は、それを行うJavaライブラリがありますか?javaまたはlinuxのコマンドラインで数値の集合から90%の分布値を計算するには?

おかげで、

ショーン

+0

出力がどのようなものか分からずに、それはすべて推測です。問題文は、awkの約2行で解決できるように聞こえます。 – tripleee

答えて

2

各測定値が別々の行にあり、実際の測定値が第1列にあると仮定して、行数をカウントし、その数値をLとします。逆順にソートすると、L/10行目の最初のフィールドが印刷されます。非整数L/10をどのように丸めるかはあなた次第です。 n(floor(L/10))とn(ceil(L/10))の間の値を補間することもできます。

#!/bin/sh 
L=$(wc -l <data.txt) 
sort -r -n data.txt | 
awk "NR >= $L/10"'{print $1; exit}' 

これは、フィールドが空白で区切られていることを前提としています。

1

あなたは90番目percentileを探しています。実行時間を最短から最長に並べ替えるだけで、最後から10%の位置にあるものを選択するだけです。引用された記事は他の方法について説明しています。

あなたは簡単にこの使用してJavaやUnixコマンドを実装することができます:sortwcheadtailまたはsed

+0

Wikiリンクありがとう –

1

時間をリストまたは配列に保存する場合、これを行うことができます。

これを実行するJavaライブラリがない場合は、

ちょうど2行のJavaコードです。私はそれをあなたのJavaプログラムに追加して、対処する出力が少なくて済むようにします。

List<Long> times = new ArrayList<>(); 
// add times 
Collections.sort(times); 
System.out.printf("The typical, 90%% and 99%%tile times were %,d/%,d/%,d %n", 
    times.get(times.size()/2), times.get(times.size()*9/10), times.get(times.size()*99/100)); 

または

long[] times = new long[SAMPLES]; 
// add times and 
Arrays.sort(times); 
System.out.printf("The typical, 90%% and 99%%tile times were %,d/%,d/%,d %n", 
    times[SAMPLES/2], times[SAMPLES*9/10], times[SAMPLES*99/100]); 

ユーザは、時間の90%を発生しますものを表すので。

実際、90パーセンタイルは90%未満の時間です。ユーザーはこの遅延(またはそれ以上)の10%しか経験しません。

関連する問題