我正在尝试使用awk解决一些问题,但是我不明白为什么这些行不起作用。
name="root"
ps -eo user:20,rss | awk "{if(\$1==$name) print \$2}"
通常,在我的系统中,有很多进程,所有者是root,但输出是空的。当我使用这个:
ps -eo user:20,rss | awk '{if($1=="root") print $2}'
一切正常,我有正确的输出,但是我需要使用此变量“名称”,所以我不能这样保留它。谢谢,请帮助我找出问题所在。
使用运行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中使用shell变量,最好将awk变量设置为shell变量的值:
ps -eo user,rss | awk -v name="$name" '$1 == name {print $2}'
这也避免了引用问题,因为现在awk将扩展awk变量以获取正确的文本。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句