2013-09-06 10 views
15

誰でもこの問題を解決できますか?awkの出力を変数に保存する

awkの出力を変数に保存しようとしています。

variable = `ps -ef | grep "port 10 -" | grep -v "grep port 10 -"| awk '{printf "%s", $12}'` 
printf "$variable" 

EDIT:$ 12は、そのプロセスで実行されているパラメータに対応します。

ありがとうございます!

+0

このシェルスクリプトを実行したときの出力は? – wens

+0

問題は本当に明確ではありません。あなたが得たエラーは何ですか? 'ps -ef'の行は何ですか?$ variableには何がありますか? (実際のデータを提供できない場合は、代わりに問題を示す消毒済みの例を生成してください) – NiKiZe

+0

問題:変数がprintf文に表示されません。 最終目標:$ 12は、そのプロセスで実行されているシリアル番号に対応します。私はそれを使用することができますので、変数にそのパラメータを保存したいです。 – Jeremy

答えて

22
#!/bin/bash 

variable=`ps -ef | grep "port 10 -" | grep -v "grep port 10 -" | awk '{printf $12}'` 
echo $variable 

等号の後にスペースがないことに注意してください。

$()を使用すると、入れ子にして読み取りが可能になります。

+0

RUI&NiKiZeに感謝、それは等号の前後の間隔でした。 – Jeremy

8

私は$()構文は...

variable=$(ps -ef | grep "port 10 -" | grep -v "grep port 10 -"| awk '{printf "%s", $12}') 

読みやすいですが、質問が変更されましたので、本当の問題は、おそらくその$12

編集「」とqoutedすべきではないと思います、これは有効なデータを返しますが、期待される出力がps -efであり、何が期待どおりかは不明です。

+0

最後のパイプの後で ''{printf'の前に' awk'があるはずです。回答が編集されたときに誤って削除された可能性があります。 – aDroid

1

前述のように、bash変数を設定しても、LHSの変数名とRHSの変数値の間に '='記号の間の空白はできません。

awkはすべてを行い、 "awk"の特別な "grep"を避けることができます。 awkのprintfの使用は、perl-ish matcherプログラムのconniptionsを与える文字列に不要な "\ n"を追加しないことです。 bashであなたのケースのための変数/パラメータ展開はその問題を持っていないので、これらの作業のいずれか:

variable=$(ps -ef | awk '/port 10 \-/ {print $12}') 

variable=`ps -ef | awk '/port 10 \-/ {print $12}'` 

「 - 」awkのレコードマッチングパターンは、検索からのawk自体を削除する必要がなくなりint型結果。

0
variable=$(ps -ef | awk '/[p]ort 10/ {print $12}') 

[p]あなたはps -ef | grep "port 10"の出力を掲示し、あなたがラインから必要なものならば、それはより簡単だろう@Jeremy ps

から示すから検索を除去するための巧妙なトリックです

関連する問題