将 shell 变量传递到 awk 搜索模式的开头

Pass shell variable to the beginning of awk search pattern

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

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

下面的代码仅适用于搜索模式,

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

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

第一个解决方案:能否请您尝试以下。

awk -v pattern="$i" 'match([=10=],"^" pattern)' Input_file


第二个解决方案 index:

awk -v pattern="$i" 'index([=11=],pattern)==1'  Input_file


第三个解决方案使用 substr:

i- 匹配。

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

ii- 要获得完全匹配:

awk -v pattern="$i" 'BEGIN{var_len=length(pattern)} substr([=13=],1,var_len)==pattern'  Input_file
awk -v pattern="$i" '
   [=10=] ~ ("^"pattern){print}
' input.txt

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