2016-04-26 5 views
0

Ich habe ein Skript, das Zahlen in Schleifen druckt.mediane mit Shell-Skript berechnen

#!/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 ist ein Programm C zusammengestellt, die eine Reihe druckt (aber ich mag es nicht auf dem Bildschirm drucken).

Ich möchte die Mediane der Zahlen in der zweiten Schleife, die ./sujet1 $1 $2 $i Drucke dann drucken diese Mediane auf dem Bildschirm. so werde ich am Ende $i Mediane haben.

I konw Ich sollte zuerst ./sujet1 $1 $2 $i >> mediane.txt verwenden, um Werte zu speichern. Aber ich weiß nicht, wie sie in der Datei wiederherzustellen, berechnen Mediane, sie löschen, wenn jede Schleife Finishing ..

EDIT:

Ich habe versucht, mit awk wie in Kommentar gesagt, aber ich finde es schwer zu verstehen für mich

#!/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 

Es funktioniert nicht für mich.

EDIT 2: Wiederholung für exemple Typ I 30 40 90 3 ./run.sh so werde ich

//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 

Sie haben bemerkt hier für jeden Wert in $ 3 I $ 4 Wert haben. Ich möchte den Median dieser $ 4 Werte berechnen und drucken ein Wert

+0

Ich kann nicht, wie dieser Befehl in meinem Fall anzuwenden .. –

+1

Ihre Frage ist sehr schwer zu verstehen, . Können Sie bitte ein paar einfache Zahlen eingeben und zeigen, was es tun soll? –

+0

Es klingt wie du _average_ sagst, wenn du _mediane_ sagst. – mklement0

Antwort

2

Ihre Frage ist sehr schwer zu verstehen, aber ich denke, dass Sie das sujet Programm viele Male ausführen und die Antwort durchschnittlich machen möchten.

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}' 

Vielleicht möchten Sie den Median aller Ausgänge des sujet Programm. Wenn ja, Rohr die Ausgabe durch sort zuerst und dann die mittlere mit awk etwas wie diese finden:

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

Ich bekomme keinen Wert .. um es sonst zu tun möchte ich: 1) speichern der C-Programmwert in einer Datei. 2) lese diesen Wert in eine Variable "total" 3) tue 1 & 2 $ 4 mal dann berechne das Medium so teile "total" durch $ 4 (total ist ein float). Ich denke, es ist der einfachste Weg. aber ich konnte es nicht richtig codieren. –

+0

@infodev Sorry. Ich kann dich immer noch nicht verstehen. Hast du das C-Programm geschrieben? Oder ist das das Problem? –

+0

Das C-Programm druckt nur eine Fließkommazahl, die sich bei jeder Schleifenumdrehung ein wenig ändert, und ich möchte nur den Median dieser Zahlen am Ende jeder zweiten Schleife berechnen. –

0

Sie könnten ‚Backticks‘ Betreiber yse:

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

Es wird verwendet, um „inline“ ein OS-Befehl ausführen, und es zuweisen ist Ausgangs zur Variablen auf der linken Seite