Ergebnis Filtern
Ergebnis Filtern
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!!!
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
Re: Ergebnis Filtern
in der bash grep
fuer ne perl regular expression bin ich leider zu muede...
gute nacht
ratte
fuer ne perl regular expression bin ich leider zu muede...
gute nacht
ratte
Re: Ergebnis Filtern
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>
<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>
Re: Ergebnis Filtern
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!
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!
Re: Ergebnis Filtern
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!
<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
Re: Ergebnis Filtern
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>
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
name: stingway
name: test
</font><hr></pre></blockquote>
Re: Ergebnis Filtern
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">
<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
Re: Ergebnis Filtern
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.
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.
Re: Ergebnis Filtern
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">
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
Re: Ergebnis Filtern
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?
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?
Re: Ergebnis Filtern
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.
: 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
Re: Ergebnis Filtern
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).
cut muesste eigtl. trotzdem funktionieren, bei sed musst du dann halt noch den ":" in den Bereich in [ ] einfuegen (direkt am Anfang).
Re: Ergebnis Filtern
@Stingway
Nachrichten lassen sich nur editieren, wenn du dich im forum eingelogt hast.
sonst koennte ja jeder lamer unsinn damit fabrizieren...
ratte
Nachrichten lassen sich nur editieren, wenn du dich im forum eingelogt hast.
sonst koennte ja jeder lamer unsinn damit fabrizieren...
ratte
Re: Ergebnis Filtern
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....
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
Re: Ergebnis Filtern
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.
also: sed 's/^[:a-zA-Z0-9_-]*/;/')
ist das grep "name:" uebrigens noetig? wenn waere fgrep schneller in diesem fall.