いくつかの問題を解決するためにawkを使用しようとしていますが、なぜこの行が機能しないのか理解できません。
name="root"
ps -eo user:20,rss | awk "{if(\$1==$name) print \$2}"
通常、私のシステムには所有者がルートですが、出力が空のプロセスがたくさんあります。私がこれを使うとき:
ps -eo user:20,rss | awk '{if($1=="root") print $2}'
すべてが大丈夫で正しい出力を得ましたが、この変数 "name"を使用する必要があるため、このままにすることはできません。何が間違っているかを調べるのに役立ちます。ありがとうございます。
答え1
実行すると、set -x
以下が表示されます。
$ ps -eo user,rss | awk "{if(\$1==$name) print \$2}"
+ ps -eo user,rss
+ awk '{if($1==root) print $2}'
引用符がありませんroot
。引用符がない場合、awkはそれをroot
文字列ではなくawk変数名として扱います。
ただし、awkでシェル変数を使用するには、awk変数をシェル変数の値に設定することをお勧めします。
ps -eo user,rss | awk -v name="$name" '$1 == name {print $2}'
これはまた、awkがawk変数を拡張して正しいテキストを取得するため、引用の問題を回避します。