In einem bash-Skript durchnummerieren

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
naka
Beiträge: 5
Registriert: 09.12.2015 10:13:45

Re: In einem bash-Skript durchnummerieren

Beitrag von naka » 09.12.2015 22:35:24

Die Idee mit der mittleren Steigung in einem Intervall hatte ich inzwischen auch. Werte in der Tabelle gibt es genügend, daran scheitert es nicht.
Mein Problem ist jetzt aber, wie ich die Werte aus Tabelle auslese.
Ich würde festlegen, dass ich immer das Intervall von 24 bis 26 nehmen. Also könnte ich diese beiden Zahlen direkt in die Formel einsetzten. Da ich mehrere Tabellen habe und bei jeder die Steigung dort haben will, unterscheidet sich y jedoch immer. Am Ende wird dies hier in einen Versuch eingebaut und man bekommt jedes Mal neue Messreihen, also kann ich y nicht festlegen. Kann ich den y-Wert bei 24 und bei 26 aus der Tabelle auslesen lassen? Es müssten also automatisch die Messreihen durchgelaufen werden, bei allen die Steigung im Intervall 24 bis 26 berechnet werden und diese dann in eine neue Tabelle abgespeichert werden. Bei jedem Versuch habe ich 5 Messreihen, die dann unter Messung0, Messung1 usw abgespeichert werden.

tobo
Beiträge: 1989
Registriert: 10.12.2008 10:51:41

Re: In einem bash-Skript durchnummerieren

Beitrag von tobo » 10.12.2015 00:37:50

naka hat geschrieben:Mein Problem ist jetzt aber, wie ich die Werte aus Tabelle auslese.
Das kommt drauf an, wie die Werte in der Tabelle drinstehen. Haste mal ein Beispiel (Dateianfang, Dateiende und +/- um die 25 rum)? Ich vermute mal, dass da ein Wertepaar pro Zeile steht (mit oder ohne Koordinate und konstantem Trenner) und nach x aufsteigend sortiert ist. Zumindest wäre das der Idealfall. Falls nicht, hast Du Einfluss auf die Darstellung der Datendateien?
Ich würde festlegen, dass ich immer das Intervall von 24 bis 26 nehmen.
Wenn das die beiden direkt umgebenden Punkte der 25 sind, dann ja.
Also könnte ich diese beiden Zahlen direkt in die Formel einsetzten.
Sind denn die x-Werte über alle Dateien konstant?
Da ich mehrere Tabellen habe und bei jeder die Steigung dort haben will, unterscheidet sich y jedoch immer.
Klar, sonst wäre dein Ergebnisdiagramm ein waagerechter Strich.
Am Ende wird dies hier in einen Versuch eingebaut und man bekommt jedes Mal neue Messreihen, also kann ich y nicht festlegen.
Du wirst vermutlich 2x zeilenweise auslesen und die beiden y-Werte direkt oder aus der jeweiligen Zeile parsen und zuweisen. Kommt auf den Aufbau der Datei an.

naka
Beiträge: 5
Registriert: 09.12.2015 10:13:45

Re: In einem bash-Skript durchnummerieren

Beitrag von naka » 10.12.2015 08:31:31

Bis jetzt habe ich nur eine erfundene Messreihe, wir konnten noch keine Versuche machen. Später wird es jedoch die x-Werte 24 und 26 sicher in jeder Tabelle geben. In meinem Beispiel würde ich einfach die Steigung zwischen 25 und 40 nehmen. Das am Ende umzuändern, sollte dann ja kein Problem mehr sein.
Die Dateien sind als Messung0.ksh, Messung1.ksh usw abgespeichert. Messung 0 sieht beispielsweise so aus:

#Weg Kraft
0.0 <tab> 0.0
25 <tab> 186.5852134
40 <tab> 250.3759729
65 <tab> 615.0974208

Ich hier also 25 und 40 direkt in die Formel einsetzten und y muss ausgelesen werden und genau an diesem Punkt hänge ich.

tobo
Beiträge: 1989
Registriert: 10.12.2008 10:51:41

Re: In einem bash-Skript durchnummerieren

Beitrag von tobo » 10.12.2015 13:10:21

So könnte man das z.B. auslesen:

Code: Alles auswählen

#!/bin/bash

FILE="/Pfad/Datei.Endung"

x1=25
x2=40

read x1 y1 < <(grep "^$x1[[:space:]]" $FILE) 
read x2 y2 < <(grep "^$x2[[:space:]]" $FILE)

echo "($y2 - $y1) / ($x2 - $x1)"
echo "($y2 - $y1) / ($x2 - $x1)" | bc -l

naka
Beiträge: 5
Registriert: 09.12.2015 10:13:45

Re: In einem bash-Skript durchnummerieren

Beitrag von naka » 10.12.2015 18:14:44

Super vielen Dank!

Um dann alle Tabellen, also hier erst einmal Messung0, Messung1 und Messung2, zu durchlaufen und bei jeder an dieser Stelle die Steigung zu berechnen, brauche ich dann noch eine for Schleife drum herum? Oder ich könnte es ja theoretisch auch so machen:

Code: Alles auswählen

#!/bin/bash
FILE0="/Daten/Studium/4.Semester/Bachelorprojekt/Messung0"
FILE1="/Daten/Studium/4.Semester/Bachelorprojekt/Messung1"
FILE2="/Daten/Studium/4.Semester/Bachelorprojekt/Messung2"

x1=25
x2=40

read x1 y1 < <(grep "^$x1[[:space:]]" $FILE0)
read x2 y2 < <(grep "^$x2[[:space:]]" $FILE0)
echo "($y2 - $y1) / ($x2 - $x1)"
echo "($y2 - $y1) / ($x2 - $x1)" | bc -l

read x1 y1 < <(grep "^$x1[[:space:]]" $FILE1)
read x2 y2 < <(grep "^$x2[[:space:]]" $FILE1)
echo "($y2 - $y1) / ($x2 - $x1)"
echo "($y2 - $y1) / ($x2 - $x1)" | bc -l

read x1 y1 < <(grep "^$x1[[:space:]]" $FILE2)
read x2 y2 < <(grep "^$x2[[:space:]]" $FILE2)
echo "($y2 - $y1) / ($x2 - $x1)"
echo "($y2 - $y1) / ($x2 - $x1)" | bc -l
Das klappt halt aber nur jetzt. Wenn ich später mehr Messreihen habe wird es so nicht mehr funktionieren...

tobo
Beiträge: 1989
Registriert: 10.12.2008 10:51:41

Re: In einem bash-Skript durchnummerieren

Beitrag von tobo » 10.12.2015 22:33:05

Eine Schleife ist natürlich besser, da flexibler und erheblich weniger Text ensteht:

Code: Alles auswählen

#!/bin/bash

FILES="/Daten/Studium/4.Semester/Bachelorprojekt/Messung*"

x1=25
x2=40

for file in $FILES; do
  [[ -r "$file" ]] || continue
  echo "$file"
  read x1 y1 < <(grep "^$x1[[:space:]]" "$file")
  read x2 y2 < <(grep "^$x2[[:space:]]" "$file")
  echo "($y2 - $y1) / ($x2 - $x1)"
  slope=$(echo "($y2 - $y1) / ($x2 - $x1)" | bc -l)
  echo "m = $slope"
  echo
done

naka
Beiträge: 5
Registriert: 09.12.2015 10:13:45

Re: In einem bash-Skript durchnummerieren

Beitrag von naka » 14.12.2015 22:55:54

Super vielen Dank, es funktioniert! Ich habe es auch noch hinbekommen, dass die Werte in einer neuen Tabelle abgespeichert werden und diese dann auch wieder geplottet wird.

Eine andere Frage hätte ich noch.
In den Messdaten, die wir inzwischen haben, kommen als x-Werte nicht direkt 25 und 40 vor. Ich müsste statt x1=25 den x-Wert aus der ersten Zeile nehmen, der über 25 liegt und statt x2=40 den x-Wert aus der letzten Zeile, der kleiner ist als 40. Brauche ich dafür auch wieder eine Schleife, die die Zeilen durchläuft und das überprüft? Bis jetzt hat es bei mir nicht geklappt...

tobo
Beiträge: 1989
Registriert: 10.12.2008 10:51:41

Re: In einem bash-Skript durchnummerieren

Beitrag von tobo » 16.12.2015 23:48:01

naka hat geschrieben:In den Messdaten, die wir inzwischen haben, kommen als x-Werte nicht direkt 25 und 40 vor.
Bei den Messdaten war ja auch die Rede von 24 und 26!?
Ich müsste statt x1=25 den x-Wert aus der ersten Zeile nehmen, der über 25 liegt und statt x2=40 den x-Wert aus der letzten Zeile, der kleiner ist als 40. Brauche ich dafür auch wieder eine Schleife, die die Zeilen durchläuft und das überprüft?
Du nimmst den größten Wert x1<25 und den kleinsten Wert x2>25. Und eine Schleife brauchst Du nicht dafür, da diese Werte konstant sein müssen. Die kannst Du also fest ins Skript reinschreiben. Zumindest gehe ich immer noch davon aus, dass deine x-Werte in allen Dateien konstant sind und dein Steigungsdiagramm die mittleren Steigungen eines konstanten Intervals darstellen soll...

Antworten