将 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
括号可能不是必需的,但它们有助于清晰。
我可以将一个变量传递到 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
括号可能不是必需的,但它们有助于清晰。