0 awk
我正在尝试使用 awk 来解决一些问题,但我不明白为什么这些行不起作用。
name="root"
ps -eo user:20,rss | awk "{if(\$1==$name) print \$2}"
Run Code Online (Sandbox Code Playgroud)
一般在我的系统中有很多进程,所有者是root,但输出为空。当我使用这个时:
ps -eo user:20,rss | awk '{if($1=="root") print $2}'
Run Code Online (Sandbox Code Playgroud)
一切正常,我得到了正确的输出,但我需要使用这个变量“名称”,所以我不能就这样离开它。请帮我找出问题所在,谢谢。
运行set -x
,你会看到:
$ ps -eo user,rss | awk "{if(\$1==$name) print \$2}"
+ ps -eo user,rss
+ awk '{if($1==root) print $2}'
Run Code Online (Sandbox Code Playgroud)
您缺少 周围的引号root
,如果没有引号,awk 会将其root
视为 awk 变量名,而不是字符串。
但是如果你想在 awk 中使用 shell 变量,最好将 awk 变量设置为 shell 变量的值:
ps -eo user,rss | awk -v name="$name" '$1 == name {print $2}'
Run Code Online (Sandbox Code Playgroud)
这也避免了引用问题,因为现在 awk 将扩展 awk 变量以获得正确的文本。