为什么 GSUB 在 AWK 中不起作用?

为什么 GSUB 在 AWK 中不起作用?

我正在尝试通过传递两个将用于替换的变量来用 AWK 进行替换。

我最初的尝试是:

FILE=a
cat $FILE | awk -v var1="$Linea_SF" -v var2="$Linea_EF" '{gsub(/var1/,"var2");}1'

文件a的内容为:

H224:N3-H224:N3H

这些变量包括:

Linea_SF=H224:N3-H224:N3H
Linea_EF=H224:N3-S105:O4H

但是,它并没有实现预期的替代。

Why?

还有其他方法可以做到吗?比如 sed 还是其他什么?

答案1

它不起作用,因为/var1/"var2"分别是正则表达式常量和一个字符串字面量

您可以使用的值var1作为动态正则表达式或者计算正则表达式并将的值var2作为替换字符串gsub(var1,var2),即

$ awk -v var1="$Linea_SF" -v var2="$Linea_EF" '{gsub(var1,var2);}1' "$FILE"
H224:N3-S105:O4H

cat ... |(由于awk可以直接读取文件,所以不需要)。

相关内容