AWK:如何将字段($1)放入正则表达式中以选择所有前缀?

AWK:如何将字段($1)放入正则表达式中以选择所有前缀?

假设我有一个文件A:

fileA 
fileB

假设我现在有一个名为:

fileA_someprefix_20160101.txt

现在我想要匹配 A 中以 this 为前缀的所有行filename, 所以我认为:

FILE_NAME="fileA_someprefix_20160101.txt"    
awk '"$FILE_NAME" ~ /^$1/' A.txt

我尝试了不同的方法来逃避美元符号,但没有成功。

在所有示例中,该字段都是表达式(左)而不是正则表达式的一部分。

我该如何reverse开始?

答案1

如果您使用 GNU awk,它允许字符串表达式位于 的右侧~

awk -v FILE_NAME="$FILE_NAME" 'FILE_NAME ~ ("^" $1)'  A.txt

答案2

您不能awk在正则表达式中引用变量/regex/

如果你想检查前缀,POSIXly,请使用index()函数:

FN="fileA_someprefix_20160101.txt" awk 'index(ENVIRON["FN"], $1) == 1' <file

来自POSIX 规范awk:

指数s,t

返回字符串中的位置,以字符为单位,从 1 开始编号s其中字符串t首先发生,如果根本不发生则为零。

相关内容