Kann mir jemand bei diesem Problem helfen?
Ich versuche die awk-Ausgabe in eine Variable zu speichern.
variable = `ps -ef | grep "port 10 -" | grep -v "grep port 10 -"| awk '{printf "%s", $12}'`
printf "$variable"
EDIT: $ 12 entspricht einem Parameter, der in diesem Prozess ausgeführt wird.
Vielen Dank!
#!/bin/bash
variable=`ps -ef | grep "port 10 -" | grep -v "grep port 10 -" | awk '{printf $12}'`
echo $variable
Beachten Sie, dass nach dem Gleichheitszeichen kein Leerzeichen steht.
Sie können auch $()
verwenden, was das Verschachteln ermöglicht und lesbar ist.
Ich denke, die $ () - Syntax ist einfacher zu lesen ...
variable=$(ps -ef | grep "port 10 -" | grep -v "grep port 10 -"| awk '{printf "%s", $12}')
Aber das eigentliche Problem ist wahrscheinlich, dass $12
nicht mit "" abgefragt werden sollte.
Wurde bearbeitet, seit die Frage geändert wurde. Dies gibt gültige Daten zurück. Es ist jedoch nicht klar, was die erwartete Ausgabe von ps -ef
ist und was in einer Variablen erwartet wird.
wie bereits erwähnt, erlaubt das Setzen von bash-Variablen keinen Leerraum zwischen dem Variablennamen auf der LHS und dem Variablenwert auf der RHS des Zeichens '='.
awk kann alles und vermeidet die "awk" -Station extra 'grep'. Die Verwendung von awk's printf besteht darin, kein unnötiges "\ n" in die Zeichenfolge einzufügen, durch das Perl-ish-Matcher-Programme Konnektivität erhalten. Die Variablen-/Parametererweiterung für Ihren Fall in Bash hat dieses Problem nicht, daher funktionieren beide:
variable=$(ps -ef | awk '/port 10 \-/ {print $12}')
variable=`ps -ef | awk '/port 10 \-/ {print $12}'`
Das '-' - Muster für das Record-Matching von awk entfernt die Notwendigkeit, awk selbst aus den Suchergebnissen zu entfernen.
variable=$(ps -ef | awk '/[p]ort 10/ {print $12}')
Der [p]
ist ein ordentlicher Trick, um die Suche aus ps
zu entfernen.
@Jeremy Wenn Sie die Ausgabe von ps -ef | grep "port 10"
und die Informationen, die Sie aus der Zeile benötigen, buchen, wäre es einfacher, Ihnen beim Ermitteln der richtigen Syntax zu helfen