In einem bash-Skript durchnummerieren

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
pekabe
Beiträge: 438
Registriert: 14.02.2009 17:12:07
Wohnort: Allgäu

In einem bash-Skript durchnummerieren

Beitrag von pekabe » 14.11.2015 12:05:27

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
Zuletzt geändert von pekabe am 09.12.2015 11:58:37, insgesamt 2-mal geändert.

gbotti
Beiträge: 846
Registriert: 16.07.2010 14:24:43
Wohnort: München

Re: in einem bash-Skript durchnummerieren

Beitrag von gbotti » 14.11.2015 12:47:57

Hi.

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

Benutzeravatar
smutbert
Moderator
Beiträge: 8331
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: in einem bash-Skript durchnummerieren

Beitrag von smutbert » 14.11.2015 12:51:38

genügt dir vielleicht schon

Code: Alles auswählen

for MESSUNG in Messung*
do
	echo "Input: ${MESSUNG}, Output: ${MESSUNG/Messung/Kuve}"
done

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: in einem bash-Skript durchnummerieren

Beitrag von rendegast » 14.11.2015 13:06:56

Output: ${MESSUNG/Messung/Kuve}
Das ist ein bashism, funktioniert also auch nur unter bash
(oder anderen höheren Shells)
for MESSUNG in Messung*
Ein (kleines) Problem hierbei, wenn kein Messung... existiert,
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
'ls' sortiert dabei alphanumerisch,
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
immerhin 34MB "Messung" ;) )
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Benutzeravatar
smutbert
Moderator
Beiträge: 8331
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: in einem bash-Skript durchnummerieren

Beitrag von smutbert » 14.11.2015 13:50:56

rendegast hat geschrieben:[…]Das ist ein bashism, funktioniert also auch nur unter bash
(oder anderen höheren Shells)
[…]
Es war ja auch explizit eine Lösung für die bash gefragt, dann darf man das 8) :wink:

(Danke für die Kritik — genau deswegen genieße ich solche Threads)

pekabe
Beiträge: 438
Registriert: 14.02.2009 17:12:07
Wohnort: Allgäu

Re: in einem bash-Skript durchnummerieren

Beitrag von pekabe » 15.11.2015 12:20:37

Danke für eure Hilfe!
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
Funktioniert leider noch nicht. Für euch ist das wahrscheinlich auf den ersten Blick klar...
Folgende Meldungen bekomme ich beim Ausführen des Skripts:
----- 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! -----
Leider werden die ^ hier nicht richtig dargestellt. Eigentlich stehen sie, von oben nach unten gesehen, an folgenden Stellen:
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]+)
auf 10 festgelegt? Wenn es also z.B. 24 (oder wieviele auch immer) wären, müsste ich es in [0-23] ändern?

Benutzeravatar
smutbert
Moderator
Beiträge: 8331
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: in einem bash-Skript durchnummerieren

Beitrag von smutbert » 15.11.2015 12:57:05

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:

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
$OutFile wird aber noch gar nicht verwendet? Noch wird also nichts in (unterschiedliche) Dateien geplottet?

pekabe
Beiträge: 438
Registriert: 14.02.2009 17:12:07
Wohnort: Allgäu

Re: in einem bash-Skript durchnummerieren

Beitrag von pekabe » 15.11.2015 14:07:27

Ok, soweit verstanden. Ich habe das Skript jetzt so angepasst:

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
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:
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 -----
Die Markierung "^" steht auf dem "/" vor "Daten".
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".

Benutzeravatar
smutbert
Moderator
Beiträge: 8331
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: in einem bash-Skript durchnummerieren

Beitrag von smutbert » 15.11.2015 14:31:59

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.

pekabe
Beiträge: 438
Registriert: 14.02.2009 17:12:07
Wohnort: Allgäu

Re: in einem bash-Skript durchnummerieren

Beitrag von pekabe » 15.11.2015 14:56:34

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

pekabe
Beiträge: 438
Registriert: 14.02.2009 17:12:07
Wohnort: Allgäu

Re: [gelöst] In einem bash-Skript durchnummerieren

Beitrag von pekabe » 29.11.2015 12:26:05

Es geht weiter... :D

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!

pekabe
Beiträge: 438
Registriert: 14.02.2009 17:12:07
Wohnort: Allgäu

Re: [gelöst] In einem bash-Skript durchnummerieren

Beitrag von pekabe » 29.11.2015 13:52:14

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?

pekabe
Beiträge: 438
Registriert: 14.02.2009 17:12:07
Wohnort: Allgäu

Re: [gelöst] In einem bash-Skript durchnummerieren

Beitrag von pekabe » 29.11.2015 14:17:11

TATAAAA!
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
Und okular zeigt die Datei auch gleich noch an.

Trotzdem danke, falls sich schon jemand Gedanken gemacht hat...

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

Re: [gelöst] In einem bash-Skript durchnummerieren

Beitrag von naka » 09.12.2015 10:38:36

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!

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

Re: In einem bash-Skript durchnummerieren

Beitrag von tobo » 09.12.2015 20:07:11

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

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: 1990
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: 1990
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: 1990
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: 1990
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