web-dev-qa-db-ja.com

awk出力を変数に保存する

誰でもこの問題で私を助けることができますか?

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

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

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

ありがとう!

26
Jeremy
_#!/bin/bash

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

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

$()を使用することもできます。これは、ネストを許可し、読み取り可能です。

35
wens

$()構文は読みやすいと思います...

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

しかし、本当の問題はおそらく$12を「」で囲んではいけません

質問が変更されてから編集されたため、有効なデータが返されますが、ps -efは、変数に期待されるものです。

12
NiKiZe

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

awkはすべてを行うことができ、「awk」方向の余分な「grep」を回避できます。 awkのprintfの使用は、Perlのようなマッチャープログラムに接続を与える不必要な「\ n」を文字列に追加しないことです。 bashの場合の変数/パラメーター展開にはその問題がないため、次のいずれかが機能します。

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

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

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

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

[p]は、psから表示から検索を削除する巧妙なトリックです。

@Jeremy ps -ef | grep "port 10"の出力とその行から必要なものを投稿すると、正しい構文を取得するのがより簡単になります。

0
Jotne