In einem bash-Skript durchnummerieren
In einem bash-Skript durchnummerieren
Hallo,
bin leider kein bash-Skript Experte, ich bräuchte aber bitte ein "Gerüst" für folgendes Problem:
In einem Verzeichnis auf dem PC befinden sich z.B. zehn Dateien mit Messergebnissen. Diese Dateien heißen Messung1, Messung2, Messung3 usw.
In einem Skript soll nun gnuplot diese zehn Dateien nacheinander auslesen und die zehn erstellten Diagramme mit den durchnummerierten Dateinamen Kurve1, Kurve2, Kurve3 usw. abspeichern.
Das ganze Drumherum mit gnuplot habe ich bereits, mir geht es hier nur um die Realisierung einer Schleife, um hoch zu zählen.
Bei nur zehn Werten könnte man natürlich auch einfach die gnuplot-Befehle explizit zehn Mal reinschreiben, aber es könnten ja auch mal 100 oder 1000 Dateien sein.
Danke für eure Hilfe!
pekabe
bin leider kein bash-Skript Experte, ich bräuchte aber bitte ein "Gerüst" für folgendes Problem:
In einem Verzeichnis auf dem PC befinden sich z.B. zehn Dateien mit Messergebnissen. Diese Dateien heißen Messung1, Messung2, Messung3 usw.
In einem Skript soll nun gnuplot diese zehn Dateien nacheinander auslesen und die zehn erstellten Diagramme mit den durchnummerierten Dateinamen Kurve1, Kurve2, Kurve3 usw. abspeichern.
Das ganze Drumherum mit gnuplot habe ich bereits, mir geht es hier nur um die Realisierung einer Schleife, um hoch zu zählen.
Bei nur zehn Werten könnte man natürlich auch einfach die gnuplot-Befehle explizit zehn Mal reinschreiben, aber es könnten ja auch mal 100 oder 1000 Dateien sein.
Danke für eure Hilfe!
pekabe
Zuletzt geändert von pekabe am 09.12.2015 11:58:37, insgesamt 2-mal geändert.
Re: in einem bash-Skript durchnummerieren
Hi.
Irgendwie sowas?
Irgendwie sowas?
Code: Alles auswählen
#!/bin/bash
for f in Messung*; do
MyNumber=$(echo $f | egrep -o [0-9]+)
OutFile="Kurve$MyNumber"
echo "Input: $f --- Nummer: $MyNumber --- Outfile: $OutFile"
done
Georg
RTFM, LMGTFY, Orakel... Ach... Warum muss man suchen...
Schrödingers Backup --- "Der Zustand eines Backups ist unbekannt, solange man es nicht wiederherstellt" --- Quelle: Nixcraft
RTFM, LMGTFY, Orakel... Ach... Warum muss man suchen...
Schrödingers Backup --- "Der Zustand eines Backups ist unbekannt, solange man es nicht wiederherstellt" --- Quelle: Nixcraft
Re: in einem bash-Skript durchnummerieren
genügt dir vielleicht schon
Code: Alles auswählen
for MESSUNG in Messung*
do
echo "Input: ${MESSUNG}, Output: ${MESSUNG/Messung/Kuve}"
done
Re: in einem bash-Skript durchnummerieren
Das ist ein bashism, funktioniert also auch nur unter bashOutput: ${MESSUNG/Messung/Kuve}
(oder anderen höheren Shells)
Ein (kleines) Problem hierbei, wenn kein Messung... existiert,for MESSUNG in Messung*
so wird die "Schleife" auf "Messung*" angewendet
Vielleicht
Code: Alles auswählen
ls -1 Messung*; while read mess; do
IDX=${mess#Messung}
[ -f "Kurve$IDX" ] || {
mache_gnuplott.sh "$mess" > "Kurve$IDX"
}
done
auf die Erstellung der Messung* hast Du ja die Kontrolle, also ob
Messung1 <-> Messung0001 <-> Messung$(date +%Y%m%d%H%M%S) resp. Messung/$(date +%Y%m%d%H%M%S)
(
Code: Alles auswählen
$ seq 1 5000000 | while read m; do echo -n Messung >> test; done; du -sm test
34 test
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")
Re: in einem bash-Skript durchnummerieren
Es war ja auch explizit eine Lösung für die bash gefragt, dann darf man dasrendegast hat geschrieben:[…]Das ist ein bashism, funktioniert also auch nur unter bash
(oder anderen höheren Shells)
[…]
(Danke für die Kritik — genau deswegen genieße ich solche Threads)
Re: in einem bash-Skript durchnummerieren
Danke für eure Hilfe!
Ich habe versucht, das Skript von gbotti in mein Skript zu integrieren. Das sieht jetzt so aus:
Funktioniert leider noch nicht. Für euch ist das wahrscheinlich auf den ersten Blick klar...
Folgende Meldungen bekomme ich beim Ausführen des Skripts:
1. beim "f" von "for"
2. hinter dem "="
3. auf dem "e" von "echo"
4. auf dem "d" von done
Könnt ihr mir hier bitte noch Hilfestellung geben? Danke!
Noch eine Frage: Wird die Anzahl der Dateien durch die Zeile
auf 10 festgelegt? Wenn es also z.B. 24 (oder wieviele auch immer) wären, müsste ich es in [0-23] ändern?
Ich habe versucht, das Skript von gbotti in mein Skript zu integrieren. Das sieht jetzt so aus:
Code: Alles auswählen
#!/bin/bash
echo
echo ----- gnuplot als Skript -----
echo
gnuplot << EOT
set terminal png
set xrange [0:80]
set xtics (0,25,40,65)
set yrange [0:]
set grid
set xlabel "Eindrueckweg [%]"
set ylabel "Eindrueckkraft [N]"
set title "Kraft-Weg-Diagramm"
for f in Messung*; do
MyNumber=$(echo $f | egrep -o [0-9]+)
OutFile="/Daten/Studium/4.Semester/Bachelorprojekt/Zwickwerte/Kurve$MyNumber"
echo "Input: $f --- Nummer: $MyNumber --- Outfile: $OutFile"
plot "/Daten/Studium/4.Semester/Bachelorprojekt/Zwickwerte/Messung$MyNumber" using 1:2 smooth csplines t "Kraftverlauf" with lines
done
# set output "/Daten/Studium/4.Semester/Bachelorprojekt/Kurve_$(date +"%Y.%m.%d_%H:%M").png" #mit aktuellem Datum und Uhrzeit abspeichern
# plot "/Daten/Studium/4.Semester/Bachelorprojekt/Zwickwerte/Kurve1.txt" using 1:2 smooth csplines t "Kraftverlauf" with lines
EOT
echo
echo ----- Fertig! -----
echo
Folgende Meldungen bekomme ich beim Ausführen des Skripts:
Leider werden die ^ hier nicht richtig dargestellt. Eigentlich stehen sie, von oben nach unten gesehen, an folgenden Stellen:----- gnuplot als Skript -----
gnuplot> for f in Messung*; do
^
line 0: invalid command
gnuplot> MyNumber=
^
line 0: constant expression required
gnuplot> echo "Input: --- Nummer: --- Outfile: "
^
line 0: invalid command
line 0: warning: Skipping unreadable file "/Daten/Studium/4.Semester/Bachelorprojekt/Zwickwerte/Messung"
line 0: No data in plot
gnuplot> done
^
line 0: invalid command
----- Fertig! -----
1. beim "f" von "for"
2. hinter dem "="
3. auf dem "e" von "echo"
4. auf dem "d" von done
Könnt ihr mir hier bitte noch Hilfestellung geben? Danke!
Noch eine Frage: Wird die Anzahl der Dateien durch die Zeile
Code: Alles auswählen
MyNumber=$(echo $f | egrep -o [0-9]+)
Re: in einem bash-Skript durchnummerieren
Habe zwar schon lange nichts mehr mit gnuplot gemacht, aber ich versuche es einmal: Alles zwischen »gnuplot << EOT« und »EOT« sind gnuplot-Befehle bzw. müssten sie es sein. Du hast da aber die shellartige for-Schleife samt Shellbefehlen eingebaut, mit der gnuplot nichts anfangen kann. Wenn alles in dieser einen Datei stehen soll, fällt mir auf Anhieb nur so eine Lösung ein, bei der alle gnuplot-Befehle innerhalb der (shell-)for-Schleife stehen:
$OutFile wird aber noch gar nicht verwendet? Noch wird also nichts in (unterschiedliche) Dateien geplottet?
Code: Alles auswählen
#!/bin/bash
for f in Messung*; do
MyNumber=$(echo $f | egrep -o [0-9]+)
OutFile="/Daten/Studium/4.Semester/Bachelorprojekt/Zwickwerte/Kurve$MyNumber"
echo "Input: $f --- Nummer: $MyNumber --- Outfile: $OutFile"
echo
echo ----- gnuplot-Skript Beginn -----
echo
gnuplot << EOT
set terminal png
set xrange [0:80]
set xtics (0,25,40,65)
set yrange [0:]
set grid
set xlabel "Eindrueckweg [%]"
set ylabel "Eindrueckkraft [N]"
set title "Kraft-Weg-Diagramm"
plot "/Daten/Studium/4.Semester/Bachelorprojekt/Zwickwerte/Messung$MyNumber" using 1:2 smooth csplines t "Kraftverlauf" with lines
EOT
echo
echo ----- gnuplot-Skript Ende -----
echo
done
Re: in einem bash-Skript durchnummerieren
Ok, soweit verstanden. Ich habe das Skript jetzt so angepasst:
Beim Outfile habe ich die Dateiendung .png angehängt, da der Plot als PNG-Grafik gespeichert werden soll.
Außerdem habe ich die Zeile "set output $OutFile" vor dem plot-Befehl eingefügt.
Testweise sind jetzt drei Dateien mit Messwerten abgelegt: Messung0, Messung1 und Messung2. Entsprechend habe ich die Zeile am Anfang auf "MyNumber=$(echo $f | egrep -o [0-2]+)" geändert. Bei all dem weiß ich nicht, ob das so richtig ist. Jedenfalls läuft das Skript noch nicht, folgende Meldungen kommen:
Wie ich das sehe, wird die laufende Nummer der for-Schleife nicht an den Dateinamen angehängt, also z.B. "Kurve" statt "Kurve0". Ebenso bei "Messung".
Code: Alles auswählen
#!/bin/bash
for f in Messung*; do
MyNumber=$(echo $f | egrep -o [0-2]+)
OutFile="/Daten/Studium/4.Semester/Bachelorprojekt/Zwickwerte/Kurve$MyNumber.png"
echo "Input: $f --- Nummer: $MyNumber --- Outfile: $OutFile"
echo
echo ----- gnuplot-Skript Beginn -----
echo
gnuplot << EOT
set terminal png
set xrange [0:80]
set xtics (0,25,40,65)
set yrange [0:]
set grid
set xlabel "Eindrueckweg [%]"
set ylabel "Eindrueckkraft [N]"
set title "Kraft-Weg-Diagramm"
set output $OutFile
plot "/Daten/Studium/4.Semester/Bachelorprojekt/Zwickwerte/Messung$MyNumber" using 1:2 smooth csplines t "Kraftverlauf" with lines
EOT
echo
echo ----- gnuplot-Skript Ende -----
echo
done
Außerdem habe ich die Zeile "set output $OutFile" vor dem plot-Befehl eingefügt.
Testweise sind jetzt drei Dateien mit Messwerten abgelegt: Messung0, Messung1 und Messung2. Entsprechend habe ich die Zeile am Anfang auf "MyNumber=$(echo $f | egrep -o [0-2]+)" geändert. Bei all dem weiß ich nicht, ob das so richtig ist. Jedenfalls läuft das Skript noch nicht, folgende Meldungen kommen:
Die Markierung "^" steht auf dem "/" vor "Daten".Input: Messung* --- Nummer: --- Outfile: /Daten/Studium/4.Semester/Bachelorprojekt/Zwickwerte/Kurve.png
----- gnuplot-Skript Beginn -----
gnuplot> set output /Daten/Studium/4.Semester/Bachelorprojekt/Zwickwerte/Kurve.png
^
line 0: invalid expression
line 0: warning: Skipping unreadable file "/Daten/Studium/4.Semester/Bachelorprojekt/Zwickwerte/Messung"
line 0: No data in plot
----- gnuplot-Skript Ende -----
Wie ich das sehe, wird die laufende Nummer der for-Schleife nicht an den Dateinamen angehängt, also z.B. "Kurve" statt "Kurve0". Ebenso bei "Messung".
Re: in einem bash-Skript durchnummerieren
Habe gerade dein Skript gecopied und gepastet und nur die notwendigsten Sachen anm eine Gegenheiten angepasst und es ist auf Anhieb gelaufen… so denke ich sollte es auch bei dir laufen:
Code: Alles auswählen
#!/bin/bash
for f in Messung*; do
MyNumber=$(echo $f | egrep -o [0-2]+)
OutFile="Plot${MyNumber}.png"
echo
echo "----- gnuplot-Skript Beginn -----"
echo "----- ${f} (${MyNumber}) -> ${OutFile} -----"
gnuplot << EOT
set terminal png
set xrange [0:80]
set xtics (0,25,40,65)
set yrange [0:]
set grid
set xlabel "Eindrueckweg [%]"
set ylabel "Eindrueckkraft [N]"
set title "Kraft-Weg-Diagramm"
set output "${OutFile}"
plot "${f}" using 1:2 smooth csplines t "Kraftverlauf" with lines
EOT
echo "----- gnuplot-Skript Ende -----"
echo
done
- Der Pfad »/Daten/…« hat vermutlich nicht gestimmt, das wird doch in einem Homeverzeichnis liegen? Jetzt, ohne absolute Pfadangaben finde ich es aber eh "besser", im richtigen Verzeichnis musste man sich beim Aufruf sowieso schon befinden; allein wegen der Art wie die for-Schleife geschrieben ist.
- Pfade/Dateinamen ohne " drumherum mag gnuplot bei mir nicht.
Re: in einem bash-Skript durchnummerieren
Großartig, vielen Dank!
Das Verzeichnig "/Daten..." steht nicht im Home-Verzeichnis, "Daten" ist direkt unter "/" gemountet. Und das Skript war bisher auch nicht im selben Verzeichnis wie die Messwertdateien, evtl. auch ein Grund für die Fehlermeldungen. Hab's noch nicht ausprobiert. Muss mich mehr in die Skript-Programmierung einlesen, aber es ist halt alles auch eine Frage der Zeit...
Jedenfalls funktioniert es jetzt, bei weiteren Fragen melde ich mich einfach wieder
Nochmals vielen Dank!
LG pekabe
Das Verzeichnig "/Daten..." steht nicht im Home-Verzeichnis, "Daten" ist direkt unter "/" gemountet. Und das Skript war bisher auch nicht im selben Verzeichnis wie die Messwertdateien, evtl. auch ein Grund für die Fehlermeldungen. Hab's noch nicht ausprobiert. Muss mich mehr in die Skript-Programmierung einlesen, aber es ist halt alles auch eine Frage der Zeit...
Jedenfalls funktioniert es jetzt, bei weiteren Fragen melde ich mich einfach wieder
Nochmals vielen Dank!
LG pekabe
Re: [gelöst] In einem bash-Skript durchnummerieren
Es geht weiter...
Ihr könnt mir sicher noch mal weiterhelfen:
Die mit gnuplot erstellten Diagramme werden mit Texmaker (LaTex) in ein Dokument eingebunden und das gesamte Dokument als pdf-Datei gespeichert. Diese Aktion soll jetzt auch in das Skript integriert werden. Könnt ihr mir da bitte weiterhelfen? Das Skript muss also "lediglich" das Dokument "Messdatenauswertung.tex" als pdf abspeichern...
Vielen Dank im Voraus!
Ihr könnt mir sicher noch mal weiterhelfen:
Die mit gnuplot erstellten Diagramme werden mit Texmaker (LaTex) in ein Dokument eingebunden und das gesamte Dokument als pdf-Datei gespeichert. Diese Aktion soll jetzt auch in das Skript integriert werden. Könnt ihr mir da bitte weiterhelfen? Das Skript muss also "lediglich" das Dokument "Messdatenauswertung.tex" als pdf abspeichern...
Vielen Dank im Voraus!
Re: [gelöst] In einem bash-Skript durchnummerieren
Bei meiner Suche nach einer Lösung bin ich auf pdftex und luatex gestoßen. Bei Anwendung der simplen Zeile "pdftex Messdatenauswertung.tex" bzw. "luatex Messdatenauswertung.tex" kommen jede Menge abfragen, die mir nichts sagen. Es wird am Ende zwar ein pdf erzeugt, in dem aber nur ein paar Zeilen des Latex-Codes aus Texmaker stehen. Gibt es eine Möglichkeit, in einem bash-Skript Texmaker anzuweisen, die Datei als pdf zu speichern?
Re: [gelöst] In einem bash-Skript durchnummerieren
TATAAAA!
Lösung selbst gefunden!!!
Habe einfach die Zeile aus den Texmaker-Einstellungen kopiert und um den expliziten Dateinamen erweitert:
Und okular zeigt die Datei auch gleich noch an.
Trotzdem danke, falls sich schon jemand Gedanken gemacht hat...
Lösung selbst gefunden!!!
Habe einfach die Zeile aus den Texmaker-Einstellungen kopiert und um den expliziten Dateinamen erweitert:
Code: Alles auswählen
pdflatex -synctex=1 -interaction=nonstopmode Messdatenauswertung.tex
okular Messdatenauswertung.pdf
Trotzdem danke, falls sich schon jemand Gedanken gemacht hat...
Re: [gelöst] In einem bash-Skript durchnummerieren
Hallo, ich bin die Tochter von pekabe, die dieses bash-Skript braucht.
Und es gibt ein weiteres Problem..es funktioniert alles wunderbar, wir konnten es auch mit unserem Raspberry Pi verbinden und damit Versuchsergebnisse auswerten.
Bei den ausgegebenen Diagrammen handelt es sich um Kraft-Weg-Diagramme. Wir brauchen am Ende die Steifigkeit, also die Steigung der Kraft-Weg-Kurve, immer bei x=25 aus allen Diagrammen. Diese neuen Werte sollen dann wieder in ein Diagramm gepackt werden und so den Verlauf der Steifigkeit darstellen.
Meine erste Idee war, das mit Matlab zu machen, aber das Skript soll am Ende auf nem Raspberry Pi laufen. Also muss es auch ohne Matlab funktonieren.
Kann mir jemand helfen, wie man die Steigung an einem bestimmten Punkt aus einem Diagramm abliest und dann vielleicht wieder in eine Tabelle speichert, damit man dann damit weiterarbeiten kann?
Vielen Dank schon mal!
Und es gibt ein weiteres Problem..es funktioniert alles wunderbar, wir konnten es auch mit unserem Raspberry Pi verbinden und damit Versuchsergebnisse auswerten.
Bei den ausgegebenen Diagrammen handelt es sich um Kraft-Weg-Diagramme. Wir brauchen am Ende die Steifigkeit, also die Steigung der Kraft-Weg-Kurve, immer bei x=25 aus allen Diagrammen. Diese neuen Werte sollen dann wieder in ein Diagramm gepackt werden und so den Verlauf der Steifigkeit darstellen.
Meine erste Idee war, das mit Matlab zu machen, aber das Skript soll am Ende auf nem Raspberry Pi laufen. Also muss es auch ohne Matlab funktonieren.
Kann mir jemand helfen, wie man die Steigung an einem bestimmten Punkt aus einem Diagramm abliest und dann vielleicht wieder in eine Tabelle speichert, damit man dann damit weiterarbeiten kann?
Vielen Dank schon mal!
Re: In einem bash-Skript durchnummerieren
Die Steigung ist die erste Ableitung der Funktion, Du hast hier allerdings Wertepaare. Entweder erstellst Du dir also eine Näherungsfunktion oder bestimmst die mittlere Steigung in einem Intervall, um deinen Punkt herum, was sich wohl auch anbieten würde, wenn genügend viele Wertepaare (Punkte in deiner Tabelle) gegeben sind!? Du nimmst also das Wertepaar vor x=25 (x1) und das nach x=25 (x2) und erhältst dann die mittlere Steigung im Intervall [x1,x2] mit m=(y2-y1)/(x2-x1). Umso näher x1 und x2 an x=25 liegen, umso genauer bist Du natürlich. Und mit dem Verfahren iterierst Du dann durch deine Dateien und erstellst jeweils ein neues Wertepaar in deiner neuen Steigungsdatei...
Re: In einem bash-Skript durchnummerieren
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.
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.
Re: In einem bash-Skript durchnummerieren
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?naka hat geschrieben:Mein Problem ist jetzt aber, wie ich die Werte aus Tabelle auslese.
Wenn das die beiden direkt umgebenden Punkte der 25 sind, dann ja.Ich würde festlegen, dass ich immer das Intervall von 24 bis 26 nehmen.
Sind denn die x-Werte über alle Dateien konstant?Also könnte ich diese beiden Zahlen direkt in die Formel einsetzten.
Klar, sonst wäre dein Ergebnisdiagramm ein waagerechter Strich.Da ich mehrere Tabellen habe und bei jeder die Steigung dort haben will, unterscheidet sich y jedoch immer.
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.Am Ende wird dies hier in einen Versuch eingebaut und man bekommt jedes Mal neue Messreihen, also kann ich y nicht festlegen.
Re: In einem bash-Skript durchnummerieren
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.
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.
Re: In einem bash-Skript durchnummerieren
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
Re: In einem bash-Skript durchnummerieren
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:
Das klappt halt aber nur jetzt. Wenn ich später mehr Messreihen habe wird es so nicht mehr funktionieren...
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
Re: In einem bash-Skript durchnummerieren
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
Re: In einem bash-Skript durchnummerieren
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...
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...
Re: In einem bash-Skript durchnummerieren
Bei den Messdaten war ja auch die Rede von 24 und 26!?naka hat geschrieben:In den Messdaten, die wir inzwischen haben, kommen als x-Werte nicht direkt 25 und 40 vor.
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...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?