【问题标题】:Use AWK pattern with Variable using command line output使用命令行输出将 AWK 模式与变量一起使用
【发布时间】:2018-05-06 22:25:10
【问题描述】:

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

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

我希望将“/md2/”设置为变量。 search="/md2/" 使用

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

没有回应,我该怎么做。

【问题讨论】:

    标签: bash ubuntu awk terminal


    【解决方案1】:

    用途:

    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" 具有潜在危险。无论$search 的内容是什么,awk 都会执行。除非您非常确定内容是什么,否则这可能会导致文件损坏或删除等。

    2. awk 的两次使用是不必要的,而且速度很慢。选择一行和打印一个字段这两种操作都可以在一次 awk 调用中完成。

    【讨论】:

      猜你喜欢
      • 2011-09-16
      • 1970-01-01
      • 1970-01-01
      • 2010-12-24
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多