rsh mit awk Syntax problem

T

Tittipoco

Jungspund
halli hallo,

ich habe ein Syntax problem bei folgendem Aufruf:
rsh $SERVER -n "cat $LOGGESTERN ö grep PrintFile ö grep $SUCH ö awk -v CLIENT=$SERVER 'äprint SERVER,$1 ";" $6ü'" >> "$AUSGABE"

Das Problem liegt bei dem ";" Das kann aus Gründen des rsh- Aufrufes nicht korrekt übersetzt werden. wie genau kann ich das syntaktisch richtig eingeben ?

hoffe ihr könnt mir helfen !
 
Hallo

Versuch es mal mit "\073" statt dem Semikola.

Gruß Wolfgang
PS Sind die ö Tippfehler?
 
ist kein tippfehöer mit dem Ö .. aber das wird bei mir anders dargestellt

ich habe jetzt
'{print SERVER,$1,\073;\073,$6}' - aber es funktioniert leider immern noch nicht :/
syntax error The source line is 1.
The error context is
{print SERVER, >>> \ <<< 073;\073 }
awk: The statement cannot be correctly parsed.
 
Zuletzt bearbeitet:
ist kein tippfehöer mit dem Ö .. aber das wird bei mir anders dargestellt

ich habe jetzt
'{print SERVER,$1,\073;\073,$6}' - aber es funktioniert leider immern noch nicht :/
syntax error The source line is 1.
The error context is
{print SERVER, >>> \ <<< 073;\073 }
awk: The statement cannot be correctly parsed.

"\073" !=\073

Gruß Wolfgang
 
Sieht so aus, als ob die ö's Pipes, also | wären. Für mich hast Du ein komisches Codierungsproblem - wie ist denn dein Terminal/Shell eingestellt (xterm, vt100 und speziell $LC_*) ??
 
Ja, ich weiss .. das ist etwas ätzend, aber daran kann ich nix machen. Ist Admin sache ... und der hat das halt so eingestellt! was solls :-)

zum eigneltichen Problem: es funktioniert immer noch nicht , mein Code sieht jetzt wie folgt aus:
rsh $SERVER -n "cat $LOGGESTERN | grep PrintFile | grep $SUCH | awk -v CLIENT=$SERVER '{print SERVER,$1,"\073";"\073",$6}'" >> "$AUSGABE"
 
Ja, ich weiss .. das ist etwas ätzend, aber daran kann ich nix machen. Ist Admin sache ... und der hat das halt so eingestellt! was solls :-)

zum eigneltichen Problem: es funktioniert immer noch nicht , mein Code sieht jetzt wie folgt aus:
rsh $SERVER -n "cat $LOGGESTERN | grep PrintFile | grep $SUCH | awk -v CLIENT=$SERVER '{print SERVER,$1,"\073";"\073",$6}'" >> "$AUSGABE"

Warum nun wieder das ;? :think:
Die "\073" ist doch das Semikolon.
Und wenn du überall innerhalb von print das gedachte Semikolon durch "\073" ersetzt, sollte das gehen.

Was deine Tastatur lokal angeht, so musst du halt konsequent eng einstellen, wenn sie nunmal engl. ist.

Gruß Wolfgang
 
Oh, da haben wir uns wohl missverstanden ! Ich dachte das "\073" wären die "" und nicht das ;

Ich hatte am Anfang
Das Problem liegt bei dem ";" Das kann aus Gründen des rsh- Aufrufes nicht korrekt übersetzt werden. wie genau kann ich das syntaktisch richtig eingeben ?

geschrieben. War von mir wohl missverständlich, da man das Problem nur auf das ; beziehen kann, in meinem Fall ist das Problem aber das gesamte, also ";" (Das Huptproblem liegt wohl an den " " da diese innerhab des RSH Befehlst stress machen .. nur verlangt die Syntax von AWK wiederrum die Benutzung von den " ") Was soll man da also machen ?
 
Hallo

Warum verwendest du nicht ssh?
Vielleicht funktioniert es ja dann

Gruß Lumpi
 
Hallo

Deinen Posts entnehme ich, dass du nicht der Admin vom Server bist.
Erkundige dich doch mal bei dem, ob rsh / ssh überhaupt zugelassen wird.
Sonst ist alles probieren zwecklos.

Gruß Lumpi
 
RSH ist zugelassen, SSH nur bedingt. Deswegen muss ich auch RSH nehmen ! und das funktioniert auch. Ist halt nur das syntaktische Problem

edit:
ich habe das ";" einfach mal komplett herausgenommen weil ich da noch eine andere Idee hatte, Jetzt gibt er folgenden Fehlermeldung:

syntax error The source line is 1.
The error context is
{print >>> SERVER,, <<<
awk: The statement cannot be correctly parsed.
The source line is 1.

Zeile sieht im Moment so aus:
rsh $SERVER -n "cat $LOGGESTERN | grep PrintFile | grep $SUCH | awk -v CLIENT=$SERVER '{print SERVER,$1,$6}'" >> "$AUSGABE"

kann das vielleicht auch an was ganz anderem liegen, das es mit dem ";" gar nix zu tun hat, er dann nur noch eine andere Fehlermeldung ausgibt ?
 
Hallo

Ja ich hatte dein Problem wirklich falsch verstanden.
Aber IMHO musst du die Variablen vor der remote Shell schützen.
Das ist ein wenig vertrackt, aber bei genauerem Betrachten sollte es so gehen:
(mit ssh geht das und rsh verwende ich nicht.)
Code:
rsh $SERVER -n "cat $LOGGESTERN | grep PrintFile | grep $SUCH | awk -v CLIENT=$SERVER '{print SERVER,\$1,\$6}'" >> "$AUSGABE"
Die Doppelquote führen nämlich dazu, dass die Variablen $1 und $6 von der remote Shell ausgewertet werden.

Willst du nun noch ein Semikola dazwischen, dann würde ich das so machen:
rsh $SERVER -n "cat $LOGGESTERN | grep PrintFile | grep $SUCH | awk -v CLIENT=$SERVER '{print SERVER\$1,\";\",\$6}'" >> "$AUSGABE"


Getestet habe ich das mit der ssh in ähnlicher Form.
Code:
$ A=Test;
$ ssh r_host1 "echo wert1 wert2|awk -v Wert=$A '{print Wert\";\",\$2,$1}'"  2>/dev/null
Test; wert2 wert1
Hoffe es hilft.

Gruß Wolfgang
 
Ah, wunderbar, das hat mich jetzt schon ein ganzes Stück weitergebracht. Jetzt gibt er keine Fehlermeldung mehr, aber die Ausgabe ist trotzdem noch nicht ganz korrekt:
Ausgabe :
?s?a?a2?:43:38.225;;;/or?CI?P?b?T/ (? wegen Betriebsgeheimnis)
Wie ihr seht stehen die ; nicht ziwschen den Werten, sondern werden einfach aneinander gereiht.

Ich habe jetzt die ; einfach aus dem AWK Aufruf herausgenommen und werde später mit dem SED alle dadurch entstehenden Leerzeichen durch ein ; ersetzen! So funktioniert es wunderbar !

Ich danke allen beteiligten, un besonders Wolfgang für ihr Hilfe und Engagement :-) ich werde ab jetzt öfters hier im Board unterwegs sein, und hoffe ich kann auch mal jmd helfen und nicht immer umgekehrt ^^
lg Tittipoco
 
Hallo,

syntax error The source line is 1.
The error context is
{print >>> SERVER,, <<<
awk: The statement cannot be correctly parsed.
The source line is 1.

Zeile sieht im Moment so aus:
rsh $SERVER -n "cat $LOGGESTERN | grep PrintFile | grep $SUCH | awk -v CLIENT=$SERVER '{print SERVER,$1,$6}'" >> "$AUSGABE"

wenn man sich das so ansieht, dann springt einem auf jeden Fall eines ins Auge
und zwar, dass du zwar eine Variable 'CLIENT' definierst, aber sie nicht
verwendest!! In Deinem print-Aufruf vom awk steht dann plötzlich 'print
SERVER' - das kann nicht funktionieren und deshalb die Fehlermeldung.

Richtiger wäre:
Code:
rsh $SERVER -n "cat $LOGGESTERN | grep PrintFile | grep $SUCH | awk -v [B]SERVER[/B]=$SERVER  '{print SERVER,$1,$6}'" >> "$AUSGABE"
 
Richtiger wäre:
Code:
rsh $SERVER -n "cat $LOGGESTERN | grep PrintFile | grep $SUCH | awk -v [B]SERVER[/B]=$SERVER  '{print SERVER,$1,$6}'" >> "$AUSGABE"
Hallo,

IMHO ist es richtiger die Ausgabe von CLIENT zu printen.
Code:
rsh $SERVER -n "cat $LOGGESTERN | grep PrintFile | grep $SUCH | awk -v CLIENT=$SERVER  '{print [B]CLIENT[/B],$1,$6}'" >> "$AUSGABE"
Vielleicht verwendet Tittipoco ja beide Variablen. ;)

Gruß Lumpi
 
Auf die Logische Syntax bin ich nicht eingegangen, da ich mich lediglich auf das Problem des Escapen der Positionsvariablen von awk beschränkt habe.

Deshalb habe ich ja auch mein Beispiel angefügt, was ich mit ssh getestet hatte.

Wie ich die zu definierende Variable nenne, ist aber nun wirklich wurscht, wenn ich weiss was sie bedeutet und richtig abrufe. ;)

Zum Problem
Ausgabe :
?s?a?a2?:43:38.225;;;/or?CI?P?b?T/ (? wegen Betriebsgeheimnis)
Wie ihr seht stehen die ; nicht ziwschen den Werten, sondern werden einfach aneinander gereiht.
Damit kann ich nicht wirklich etwas anfangen. Aber gut, wenn Betriebsgeheimnis dann sei es drum.
Ist deine seltsame Tastatureinstellung auch Betriebsgeheimnis? ;)
Du könntest ja erfundene Beispieldaten bringen.
Vermutlich hast du da aber eher einen logischen Fehler in deinem Code.
Ich würde solche Dinge lokal testen, und erst dann auf den remote Befehl portieren.
Tipp:
Beim print im awk wird das Komma durch ein Leerzeichen ersetzt.
Code:
{print $1, $2} #erzeugt
Wert1 Wert2
{print $1$2} #erzeugt
Wert1Wert2
Gruß Wolfgang
 
richtig @ Schlaubi, ich hatte die Variable falsch adressiert, das war aber nur ein Tippfehler und nicht das eigenltiche Problem :-)

Auf jedenfall funktioniert es jetzt so, wie Wolfgang es vorgeschlagen hat !

Wegen der Zeile mit dem Betriebsgeheimnis .. das sieht dann ca so aus:
$Serverinhaltxx:xx:xx:xx;;;/blabla/blabla/blala

das sollte aber so sein :
$Serverinhalt;xx:xx:xx:xx;/blablabla/blablalba;

aber ich hab es ja hinbekommen :-) danke schön
 

Ähnliche Themen

Script pausieren bis Bedingung erfüllt ist

Keine grafische Oberfläche (Debian Installation)

AWK Tip gesucht

Problem mit HSPA+ Modem Huawei E353 - Installation unmöglich?

E-Mail Empfang, Aliases unter Debian Squeeze

Zurück
Oben