【问题标题】:Pass shell variable to the beginning of awk search pattern将 shell 变量传递到 awk 搜索模式的开头
【发布时间】:2020-01-15 10:46:02
【问题描述】:

我可以将一个变量传递给 awk 的模式,但我不确定如果这个变量位于模式的开头我应该怎么做,所以这里是一个示例代码

    awk -v pattern="$i" '
       $0 ~ /^$pattern/{print}
    ' input.txt

以下代码仅用于搜索模式,

    awk -v pattern="$i" '
       $0 ~ pattern{print}
    ' input.txt

变量和正则表达式的组合应该怎么做?

【问题讨论】:

  • 将最后一个代码中的"$i" 替换为"^$i"

标签: bash shell variables awk quoting


【解决方案1】:
awk -v pattern="$i" '
   $0 ~ ("^"pattern){print}
' input.txt

括号可能不是必需的,但它们有助于清晰。

【讨论】:

    【解决方案2】:

    第一种解决方案:请您尝试以下方法。

    awk -v pattern="$i" 'match($0,"^" pattern)' Input_file
    


    index的第二个解决方案

    awk -v pattern="$i" 'index($0,pattern)==1'  Input_file
    


    使用substr的第三个解决方案:

    i- 获得匹配。

    awk -v pattern="$i" 'BEGIN{var_len=length(pattern)} substr($0,1,var_len)~pattern  Input_file
    

    ii- 获得完全匹配:

    awk -v pattern="$i" 'BEGIN{var_len=length(pattern)} substr($0,1,var_len)==pattern'  Input_file
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-28
      • 2016-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-05
      • 2016-07-28
      相关资源
      最近更新 更多