Mittelwert berechnen aus zahlen in einer Textdatei unter linux?

6 Antworten

Hallo

Nehmen wir an Du hast die Werte in einer Datei mit dem Namen temperaturdaten.txt stehen die folgendermaßen aufgebaut ist:

12349 30 22 18 31 29 22 25 27 33 10 16 19
12678 10 11 12 13 14 15 16 17 18 19 20 21
13567 22 23 24 25 26 27 28 29 30 31 32 33
52369 34 35 36 37 38 39 40 9 8 7 6 5
65498 1 2 3 4 5 6 7 8 9 10 11 12
55532 15 17 19 18 22 25 27 29 55 13 4 8

dann könnte ein Anfang für Dein Script so aussehen:

read THERMOMETER1 TEMP1 TEMP2 TEMP3 TEMP4 TEMP5 TEMP6 TEMP7 TEMP8 TEMP9 TEMP10 TEMP11 TEMP12 <<< $(cat temperaturdaten.txt)

und die Ausgabe der Variablen sähe dann so aus:

echo $THERMOMETER1
12349
linuxhase@openSUSE-Desk:~> echo $TEMP1
30
linuxhase@openSUSE-Desk:~> echo $TEMP2
22
linuxhase@openSUSE-Desk:~> echo $TEMP3
18
linuxhase@openSUSE-Desk:~> echo $TEMP4
31
linuxhase@openSUSE-Desk:~> echo $TEMP5
29
linuxhase@openSUSE-Desk:~> echo $TEMP6
22
linuxhase@openSUSE-Desk:~> echo $TEMP7
25
linuxhase@openSUSE-Desk:~> echo $TEMP8
27
linuxhase@openSUSE-Desk:~> echo $TEMP9
33
linuxhase@openSUSE-Desk:~> echo $TEMP10
10
linuxhase@openSUSE-Desk:~> echo $TEMP11
16
linuxhase@openSUSE-Desk:~> echo $TEMP12
19

Rechnen in der Shell ginge dann zum Beispiel so:

echo $(( ($TEMP1+$TEMP2+$TEMP3+$TEMP4+$TEMP5+$TEMP6+$TEMP7+$TEMP8+$TEMP9+$TEMP10+$TEMP11+$TEMP12/12) ))

oder so:

bc -l <<< "$(echo $TEMP1+$TEMP2+$TEMP3+$TEMP4+$TEMP5+$TEMP6+$TEMP7+$TEMP8+$TEMP9+$TEMP10+$TEMP11+$TEMP12/12)"

Viel Spaß beim experimentieren :-)

Linuxhase

Woher ich das weiß:Hobby
GWBln  06.07.2018, 11:09

Der Lesebefehl liefert auch die Anzahl der gelesenen Werte, also z.B. 13 bei der ersten genannten.

Diese Zahl ist um eins zu vermindern und mit einer Schleife können die Werte addiert werden:

Gelesen=13

Anz=$Gelesen-1; Summe=0; i=1

while ( $i > 1 )

do

Summe=$Summe+Wert; i=$i-1

done

Mittel=$Summe/$Anz

Die Syntax ist U.U. anzupassen, aber das Prinzip sollte klar sein.

1

file (Beispiel):

122 1.1 2.2 3.3 4.4 5.5 6.6 7.7 8.8 9.9 10.0 11.1 12.2
123 1 2 3 4 5 6 7 8 9 10 11 12

Summiert alle Zahlen, außer der Ersten, dividiert die Summe durch die Anzahl pro Zeile (-1) und gibt das Ergebnis aus:

awk '{sum="0";}{for(i=2;i<=NF;i++)sum+=$i;sum=sum/(NF-1);print $1": "sum}' file

# Ausgabe:
122: 6.9
123: 6.5

Erstmal aus den Texten Zahlen machen (z.B. in Calc übertragen)

da würd ich n kleines Script schreiben:

#!/bin/sh

Sums=()
l=0
while read bang nums ; do
  i=0
  for a in $nums ; do
    Sums[$i]=$((Sums[$i] + $a))
    i=$((i+1))
  done
  l=$((l+1))
done
echo lines:$l Summen:${Sums[*]}

Rest = Übung... :)

na guut... :)

for s in ${Sums[*]} ; do
  echo avg:$((s / l))
done
Woher ich das weiß:Studium / Ausbildung
ralphdieter  05.07.2018, 15:07
#!/bin/sh

Ich glaube, die gute alte Shell konnte noch nicht ganz so viel.

0
RIDDICC  05.07.2018, 15:08
@ralphdieter

bei mir kann sie s... LOL

ok - sie ist n symlink zur bash...

linux... argl

1
ralphdieter  05.07.2018, 15:12
@RIDDICC
sie ist n symlink zur bash...

Weiß ich. Ist aber nicht bei allen Distributionen so. Typischer Fall von "Beim Kunden fliegt ein Fehler, aber bei mir tut's" :-/

2
RIDDICC  05.07.2018, 15:08

das geht aber nur für Ganzzahlen... kicher

1