Ergebnis Filtern

Message
Author
stingway
Posts: 164
Joined: 06. Jul 2001 16:49

Ergebnis Filtern

#1 Post by stingway »

Hallo zusammen,
ich bekomme von dem Programm mysql folgende Art von ausgabe:

<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
************ row1 ************
name: stingway
inr: 1
************ row2 ************
name: test
inr: 2
</font><hr></pre></blockquote>

Die liste kann beliebig lang werden. Nun brauche ich ein Bash Script, das den Befehl ausführt, und die felder von "name" und "inr" filtert und z.B. mit echo ausgibt. Kann mir da jemand weiterhelfen ?

Ich dachte an eine schleife, die jedes Elemet
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
************ row1 ************
name: stingway
inr: 1
************ row2 ************
name: test
inr: 2
</font><hr></pre></blockquote>
in der Ausgabe durchläuft. Nun muss in der Schleife die Filterung passieren, wovon ich leider gar keine ahnung habe... <img src="http://www.pl-forum.de/UltraBoard/Images/Sad.gif" border="0" align="middle">

Wäre euch sehr sehr dankbar!!!
System: SuSe 7.0 - Kernel 2.2.16 - Textkonsole

ratte

Re: Ergebnis Filtern

#2 Post by ratte »

in der bash grep

fuer ne perl regular expression bin ich leider zu muede...

gute nacht
ratte

Jochen

Re: Ergebnis Filtern

#3 Post by Jochen »

Versuch mal folgendes:

<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
mysql <i>...hier_dein Kommando...</i> | \<!--no-->
awk '
$1 == "name:" {
name = $2
}
$1 == "inr:" {
print name, inr
}'
</font><hr></pre></blockquote>

Jochen

Re: Ergebnis Filtern

#4 Post by Jochen »

AAARGH! Dass man die Fehler aber immer erst zu spät sieht! *seufz*
Noch mal:
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
mysql ...hier_dein Kommando... | \
awk '$1 == "name:" {
name = $2
}
$1 == "inr:" {
print name, $2
}'
</font><hr></pre></blockquote>
So, diesmal aber!

stingway
Posts: 164
Joined: 06. Jul 2001 16:49

Re: Ergebnis Filtern

#5 Post by stingway »

Also, der Sachverhalt hat sich leicht verändert. Nun sieht das Muster nur noch so aus:

<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
************ row1 ************
name: stingway
************ row2 ************
name: test
</font><hr></pre></blockquote>

Nun benutze ich:

<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
************ row1 ************
name: stingway
************ row2 ************
name: test
</font><hr></pre></blockquote>
Das führt aber zu der Ausgabe:
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
************ row1 ************
name: stingway
************ row2 ************
name: test
</font><hr></pre></blockquote>

Ich hätte aber gerne als Augabe nur den Wert. Kann mri ncohmal jemand helfen... DANKE!
Last edited by stingway on 31. Aug 2001 19:01, edited 2 times in total.
System: SuSe 7.0 - Kernel 2.2.16 - Textkonsole

stingway
Posts: 164
Joined: 06. Jul 2001 16:49

Re: Ergebnis Filtern

#6 Post by stingway »

Hm, irgendwie lässt sich die nachricht nicht editieren. ich meine es führt zur Ausgabe:

<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
name: stingway
name: test
</font><hr></pre></blockquote>

stingway
Posts: 164
Joined: 06. Jul 2001 16:49

Re: Ergebnis Filtern

#7 Post by stingway »

So ich ahbe auch noch eien Lösung gefunden:

<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
mysql -uw -ps -e"Select name from test" -E db1 | grep "name: "
</font><hr></pre></blockquote>

Leider ist diese Ausgabe auch wieder, so wie oben!

name: Stingway
name: ....

Wie schon gesagt brauch ich den namen einzeln!... und eigentlich soll auch jedes Elemtn der abfrage als Kommando ausgeführt werden... ich bitte um Hilfe, denn irgendwie verzweifel ich *g <img src="http://www.pl-forum.de/UltraBoard/Images/Sad.gif" border="0" align="middle">
Last edited by stingway on 31. Aug 2001 20:04, edited 1 time in total.
System: SuSe 7.0 - Kernel 2.2.16 - Textkonsole

hugenay

Re: Ergebnis Filtern

#8 Post by hugenay »

mysql -uw -ps -e"Select name from test" -E db1 | grep "name: " | awk '{ print $2 }'

meinst du sowas? kannst auch auf grep verzichten und das nur mit sed oder awk erledigen.
sorry falsch verstanden hab, hab noch nicht den ganzen thread gelesen.

stingway
Posts: 164
Joined: 06. Jul 2001 16:49

Re: Ergebnis Filtern

#9 Post by stingway »

Danke! <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle"> ... das klappt schonmal wunderbar!
Nun müssen die Elemente nur noch als Befehl ausgeführt werden können.
Aber ich glaube da ergibt sich schon das erste Probelm, denn was ist wenn ein feld (name) z.B. so aussieht:

ls -l

dann gibt mir das Programm nämlich nur "ls" aus. Gibt es die möglich bei awk , alles AB dem 2. Wort auszugeben ? - Damit müsste mein problem doch eigentlich gelöst sein.... achja und der Befehl, der das ganze dann noch anschließend als Befehl für die Bash macht fehlt auch noch...
Ich bin euch jetzt schon sehr sehr dankbar, aber ich habe Bash noch nie programmiert und bin daher noch "Frischfleisch" <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">
System: SuSe 7.0 - Kernel 2.2.16 - Textkonsole

hugenay

Re: Ergebnis Filtern

#10 Post by hugenay »

statt awk dann sed:
sed 's/^[a-zA-Z0-9_-]* //'
mit awk faellt mir nur ein ne schleife zu machen, die vom 2ten bis zum letzten Feld (=NF) alles ausdruckt, das ist kacke. Bei dem regulaeren Ausdruck oben in sed musst du natuerlich aufpassen, dass Kommandos nicht da rausfallen oder mit nem Leerzeichen anfangen.
Oder nimm cut:
cut -d" " -f2-
Auch hier kein Leerzeichen am Anfang!

Was meinst du mit dem Befehl, der das fuer die bash startet?

stingway
Posts: 164
Joined: 06. Jul 2001 16:49

Re: Ergebnis Filtern

#11 Post by stingway »

Hi, danke erstmal wieder für die Antwort. mit sed ist fast perfekt... es wird nun

: wert

angezeigt. also ein ":" und "Lerrzeichen" noch zuviel.

Mit ausführbar mein ich, dass das script dieses element nun als Befehl ausführt. So wie z.B. "ls -l" ein befehl ist.
System: SuSe 7.0 - Kernel 2.2.16 - Textkonsole

hugenay

Re: Ergebnis Filtern

#12 Post by hugenay »

achso, z.b.: $(kommandoliste) oder mit backticks `kommandoliste`

cut muesste eigtl. trotzdem funktionieren, bei sed musst du dann halt noch den ":" in den Bereich in [ ] einfuegen (direkt am Anfang).

ratte

Re: Ergebnis Filtern

#13 Post by ratte »

@Stingway

Nachrichten lassen sich nur editieren, wenn du dich im forum eingelogt hast.

sonst koennte ja jeder lamer unsinn damit fabrizieren...

ratte

stingway
Posts: 164
Joined: 06. Jul 2001 16:49

Re: Ergebnis Filtern

#14 Post by stingway »

Hallo,
alles funktioniert nun wunderbar. Vielen Dank @hugenay. Ein dummer Fehler ist nur noch da.

Solange 1 Elemet in der Datenbankda ist funktioniert alles.

<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
$(mysql -uw -ps -e"Select name from test" -E db1 | grep "name:" | sed 's/^[:a-zA-Z0-9_-]*//')
</font><hr></pre></blockquote>

Wenn ein zweites Elemtn da gibt es eine Fehlemeldung. Als Beispiel:

In der Datenbnak sind

1. "ls -l"
2. "exit"

Dann meldet das Script:

exit: bad non-numeric arg `ls'

Das sieht natürlich danach aus, als ob das Script die beiden Elemete nciht als EINZEL Befehle interpretiert, sondern zusammen ausführt und das geht natürlich nciht!
Wie kann ich das umgehen ?


@ratte
Mit dem Editieren ud dem Login ist klar. <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle"> ... nur ich weiß warum: Editiert mal eine Nachricht in dem du 2MAL dieses code aus dem Boatd benutzt. Das 2 code lässt sich dann nicht mehr editieren....
System: SuSe 7.0 - Kernel 2.2.16 - Textkonsole

hugenay

Re: Ergebnis Filtern

#15 Post by hugenay »

sitze gerade aus unerfindlichen gruenden an nem windowsrechner. Daher ganz spontan: ersetze mit sed name: durch ;.
also: sed 's/^[:a-zA-Z0-9_-]*/;/')
ist das grep "name:" uebrigens noetig? wenn waere fgrep schneller in diesem fall.

Post Reply