gpt4 book ai didi

bash - 使用命令行输出将 AWK 模式与变量一起使用

转载 作者:行者123 更新时间:2023-12-04 18:37:44 26 4
gpt4 key购买 nike

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

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

我希望 "/md2/"将其设置为 variable 。 搜索="/md2/"使用
df -h | awk '$search' | awk '{print $5}'

给我没有回应,我该怎么做。

最佳答案

利用:

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 调用中完成。
  • 关于bash - 使用命令行输出将 AWK 模式与变量一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47447275/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com