我需要一些帮助。我有这个命令
df -h | awk '/md2/' | awk '{print $5}'
我想" / md2 /"将其设置为变量。 搜索=" / md2 /" 使用
df -h | awk '$search' | awk '{print $5}'
没有回应,我怎么能做到这一点。
答案 0 :(得分:3)
使用:
search='md2'
df -h | awk -v x="$search" '$0~x{print $5}'
工作原理:
-v x="$search"
这告诉awk定义一个awk变量x
,其值为$search
。
$0~x{print $5}
$0 ~ x
告诉awk选择与变量x
中的正则表达式匹配的行。对于选定的行,将打印字段5.
df -h | awk '$search' | awk '{print $5}'
以上不会奏效,因为$search
在单引号内并且阻止bash替换为$search
的值。您可以通过以下方式看到:
$ search='/md2/'; echo awk '$search'
awk $search
以下内容可行:
search='/md2/'
df -h | awk "$search" | awk '{print $5}'
此处,$search
位于双引号内,bash将扩展双引号变量。
这还有两个问题:
awk "$search"
有潜在危险。 Awk将执行$search
的任何内容。除非您非常确定内容是什么,否则可能导致文件损坏或删除等。
awk的两种用法是不必要的,也很慢。两个动作,选择一行和打印一个字段都可以在一次awk调用中完成。