我试图使用 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}'
一切都很好,我已经得到了正确的输出,但我需要使用这个变量“名称”,所以我不能这样保留它。请大家帮我看看哪里出了问题,谢谢。
答案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 中使用 shell 变量,最好将 awk 变量设置为 shell 变量的值:
ps -eo user,rss | awk -v name="$name" '$1 == name {print $2}'
这也避免了引用问题,因为现在 awk 将扩展 awk 变量以获得正确的文本。