2016-04-26 3 views
0

私は、ループ内の数字を表示するスクリプトを持っています。シェルスクリプトでmedianeを計算する

#!/bin/bash 
for i in `seq 80 $i` 
do 
    for j in `seq 1 $4` 
    do 
     ./sujet1 $1 $2 $i 
    done 
done 

./sujet1 $1 $2 $iは(私は、画面上でそれを印刷して好きではない)の数を出力するCコンパイルされたプログラムです。

./sujet1 $1 $2 $iは、このメディアンを画面に印刷して印刷する2番目のループの数字の中央値を計算したいと考えています。 最後に$iメディアンがあります。

私は最初に./sujet1 $1 $2 $i >> mediane.txtを使用して値を保存する必要があります。しかし、私は...すべてのループを終えたときにそれらを消去し、medianeを計算し、ファイルにそれらを回復する方法がわからない

EDIT:

コメントで語ったように私はawkのてみましたが、私はそれを見つけます私にとって理解しにくい

#!/bin/bash 
for i in `seq 80 $i` 


do 

    for j in `seq 1 $4` 
    do 
    awk '{ total += ./sujet1 $1 $2 $i } END { print total/NR }' mediane.txt 
    done 
done 

私にとってはうまくいかない。

EDIT 2:exempleのために私はあなたが$ 3、私は$ 4値繰り返しを持っているのすべての値のためにここに気づくので、私は

//for($3= 80) 
2,3 
3,5 
4,4 
//for($3= 81) 
4,5 
1,3 
5,6 
... 
//for($3=90) 
2,4 
3,5 
5,4 

を持っています40 90 3 30を./run.sh入力します。私は、あなたが「バッククォート」演算子をYSEができ、これらの$ 4つの値と印刷つの値

+0

私は... –

+1

あなたの質問を理解することは非常に困難である私の場合には、このコマンドを適用する方法を取得することはできません。あなたはいくつかの簡単な数字を入れ、それが何をするべきであるかを示すことができますか? –

+0

あなたは_mediane_と言うときに_average_のように聞こえます。 – mklement0

答えて

2

あなたの質問は非常に理解しにくいですが、sujetプログラムを何度も実行して回答を平均化したいと思っています。

for i in `seq 80 $i` 
do 
    for j in `seq 1 $4` 
    do 
     ./sujet1 $1 $2 $i 
    done 
done | awk '{total += $0} END{ print total/NR}' 

おそらく、sujetプログラムのすべての出力の中央値が必要な場合があります。もしそうなら、パイプを介して出力sort最初にして真ん中のこのようなawk何かを見つける:

for ... 
    for ... 
     ./sujet ... 
    done 
done | sort -n | awk '{x[NR]=$0} END{middle=int(NR/2); print x[middle]}' 
+0

私は価値がありません..それ以外の場合は、私はしたい:1)保存するファイル内のCプログラム値。 2)この値を変数 "total"に読み込みます。3)1と2を$ 4回実行してから、メディアを計算して、合計を$ 4で割ります(合計は浮動小数です)。私はそれが最もシンプルな方法だと思う。私はそれを正しくコード化できませんでした。 –

+0

@infodev申し訳ありません。私はまだあなたを理解できません。あなたはCプログラムを書いていますか?それとも問題なの? –

+0

Cプログラムはちょうどループターンごとにちょっと変わる浮動小数点数を出力します、そして、この2番目のループの終わりにこれらの数値の中央値を計算したいだけです。 –

0

の中央値を計算したい:

result="`./sujet1 $1 $2 $i`" 

それは、「インライン」のOSコマンドを実行し、それが出力だ割り当てるために使用されています左側の変数に

関連する問題