"We are back" « oc.at

Shell- Script Frage

weasel6667 20.03.2005 - 12:53 932 14
Posts

weasel6667

Big d00d
Avatar
Registered: May 2002
Location: Bezirk Amstetten
Posts: 149
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
Bearbeitet von weasel6667 am 20.03.2005, 13:03

COLOSSUS

Administrator
GNUltra
Avatar
Registered: Dec 2000
Location: ~
Posts: 12140
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))'

testscript.sh:
Code:
#!/bin/bash
. sourceit.sh
echo $A1 $A2 $A3

Output:
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))

War so gemeint, oder?

weasel6667

Big d00d
Avatar
Registered: May 2002
Location: Bezirk Amstetten
Posts: 149
Danke für die Antwort, aber das ist leider nicht ganz das was ich brauche (hab aber wieder was dazugelernt :D )

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

:(

COLOSSUS

Administrator
GNUltra
Avatar
Registered: Dec 2000
Location: ~
Posts: 12140
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? ;)

weasel6667

Big d00d
Avatar
Registered: May 2002
Location: Bezirk Amstetten
Posts: 149
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)

that

Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11343
sowas?

Code:
for i in `cat sourceit.txt|sed -e 's/^A=//'` ; do echo A ist: $i ; done

Edit: Natürlich braucht man "cat" hier nicht, es geht auch so:

Code:
for i in `sed -e 's/^A=//'<sourceit.txt` ; do echo A ist: $i ; done

weasel6667

Big d00d
Avatar
Registered: May 2002
Location: Bezirk Amstetten
Posts: 149
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))

that

Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11343
Was hast du vor, und warum willst du das in sh schreiben?

weasel6667

Big d00d
Avatar
Registered: May 2002
Location: Bezirk Amstetten
Posts: 149
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

that

Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11343
Wie sieht der gewünschte Input für gnuplot bei diesem Beispiel aus?

weasel6667

Big d00d
Avatar
Registered: May 2002
Location: Bezirk Amstetten
Posts: 149
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

that

Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11343
alle? oder immer nur eine?

weasel6667

Big d00d
Avatar
Registered: May 2002
Location: Bezirk Amstetten
Posts: 149
immer nur eine

that

Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11343
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.

weasel6667

Big d00d
Avatar
Registered: May 2002
Location: Bezirk Amstetten
Posts: 149
:bash: ich seh den wald vor lauter bäumen nicht mehr :D
Auf alle Fälle vielen Dank für die Lösung.
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz