使用命令行输出的变量使用AWK模式

时间:2017-11-23 03:52:39

标签: bash ubuntu awk terminal

我需要一些帮助。我有这个命令

df -h | awk '/md2/' | awk '{print $5}'

我想" / md2 /"将其设置为变量。 搜索=" / md2 /" 使用

df -h | awk '$search' | awk '{print $5}'

没有回应,我怎么能做到这一点。

1 个答案:

答案 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将扩展双引号变量。

这还有两个问题:

  1. awk "$search"有潜在危险。 Awk将执行$search的任何内容。除非您非常确定内容是什么,否则可能导致文件损坏或删除等。

  2. awk的两种用法是不必要的,也很慢。两个动作,选择一行和打印一个字段都可以在一次awk调用中完成。