URL: https://www.overclockers.at/coding-stuff/shell-script_frage_139164/page_1 - zur Vollversion wechseln!
Wie bekomme ich aus der Datei mit folgenden Inhalt:
A=(j*w+p1)/(j*w*j*w+2*j*w+p1)
A=1/(j*w*(j*w+p1))
A=1/(j*w+p1)*(j*w+p2))
es so hin, dass ich es in ein Script eingelese und der Inhalt nach dem "=" jeder Zeile einer Variabel zugewiesen wird.
also var1=(j*w+p1)/(j*w*j*w+2*j*w+p1) im Script
usw.
mit sed oder awk, ....?
Danke
Richtig escapen, Datei sourcen. Sollte genuegen.
Edit:
sourceit.sh:
Code:A1='(j*w+p1)/(j*w*j*w+2*j*w+p1)' A2='1/(j*w*(j*w+p1))' A3='1/(j*w+p1)*(j*w+p2))'
Code:#!/bin/bash . sourceit.sh echo $A1 $A2 $A3
Code:colo@colossus:~ $ ./testscript (j*w+p1)/(j*w*j*w+2*j*w+p1) 1/(j*w*(j*w+p1)) 1/(j*w+p1)*(j*w+p2))
Danke für die Antwort, aber das ist leider nicht ganz das was ich brauche (hab aber wieder was dazugelernt )
wenn sourceit.sh mit A1, A2, A3 durchnummeriert wär, dann hät ichs mit (ich weiß es is sehr umständlich)
for i in 1 2 3
do
A$i=`grep 'A$i' sourceit.sh | sed 's/A$i=//g'`
done
gemacht (Hirnfurz/ noch nicht getestet)
Nur stehen leider die Gleichungen so drinnen:
A=(j*w+p1)/(j*w*j*w+2*j*w+p1)
A=1/(j*w*(j*w+p1))
A=1/(j*w+p1)*(j*w+p2))
Hm, mir ist immer noch nicht ganz klar, was du willst... koenntest du versuchen, alles bisher von dir Gesagte noch einmal anders, eindeutig und verstaendlicher in Deutsch zu packen?
ok:
sourceit.sh hat folgenden Inhalt:
A=(j*w+p1)/(j*w*j*w+2*j*w+p1)
A=1/(j*w*(j*w+p1))
A=1/(j*w+p1)*(j*w+p2))
Ich will nun mit einem Script jede einzelne Zeile von "sourceit.sh" einlesen und alles nach "A=" in einer Variable abspeichern. (Ich muss mit den Variablen dann weiterarbeiten)
sowas?
Code:for i in `cat sourceit.txt|sed -e 's/^A=//'` ; do echo A ist: $i ; done
Code:for i in `sed -e 's/^A=//'<sourceit.txt` ; do echo A ist: $i ; done
hm so weit so gut
Ich muss mit den Variablen aber weiterarbeiten.
In dem Fall hab ich nach dem Durchlauf in i nur die letzte Gleichung gespeichert.
Ich brauche aber folgende Variablen nach dem Durchlauf:
i1=(j*w+p1)/(j*w*j*w+2*j*w+p1)
i2=1/(j*w*(j*w+p1))
i3=1/(j*w+p1)*(j*w+p2))
Was hast du vor, und warum willst du das in sh schreiben?
A=(j*w+p1)/(j*w*j*w+2*j*w+p1) ist eine Übertragungsfunktion.
Ich soll aus einem File 3 oder mehrere Übertragungsfunktionen auslesen und diese dann mittels gnuplot grafisch darstellen (Betrag und Phase).
Die Befehle für Gnuplot kenn ich und es funktioniert auch für eine Übertragungsfunktion. Nur das Auslesen der einzelnen Übertragungsfunktionen und das Abspeichern der einzelnen Funktionen als Variablen bereitet mir Schwierigkeiten.
Gibts was anderes als sh, mit dem man das durchführen könnte?
mfg
Wie sieht der gewünschte Input für gnuplot bei diesem Beispiel aus?
j={0,1}
set dummy w
A(w) = 1/(j*w*(j*w+p1)) <== hier sollen die Funktionen aus dem file rein
p1=1
set key left bottom
set grid x y2
set logscale xy
set log x2
set nolog y2
set title "Amplitude and Phase Frequency Response"
set xlabel "w (radians)"
set xrange [1.1 : 90000.0]
set x2range [1.1 : 90000.0]
set ylabel "magnitude of A(w)"
set y2label "Phase of A(w) (degrees)"
set ytics nomirror
set y2tics
set tics out
set autoscale y
set autoscale y2
plot abs(A(w))
pause -1
plot 180/pi*arg(A(w)) axes x2y2
pause -1
alle? oder immer nur eine?
immer nur eine
Wo ist dann das Problem? Vor dem "done" steht in $i genau eine Formel drin. Statt "echo" machst du halt ein File für gnuplot.
ich seh den wald vor lauter bäumen nicht mehr
Auf alle Fälle vielen Dank für die Lösung.
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025