it-swarm.com.de

Speichern der awk-Ausgabe in einer Variablen

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!

23
Jeremy
#!/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.

29
wens

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.

11
NiKiZe

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.

1
georgey
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

0
Jotne