【问题标题】: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
变量和正则表达式的组合应该怎么做?
【问题讨论】:
标签:
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