首页 > 解决方案 > 基于变量的 AWK 部分字符串匹配(如果列/单词部分匹配)

问题描述

这个问题来自这个 other

我的Linux shell脚本的案例场景:

$ cat test.txt
C1    C2    C3
1     a     snow
2     b     snowman
snow     c     sowman

搜索包含“雪”的第三个字段的行可以正常工作:

$ awk '$3 ~/snow/' test.txt
1     a     snow
2     b     snowman

但我需要通过使用变量来做到这一点:

$ word="snow"

$ echo $word
snow

$ awk -v variable="snow" '$3 ~/variable/' test.txt

$ awk -v variable="$word" '$3 ~/variable/' test.txt

$

可以看出,没有结果

我如何执行基于变量的 AWK 搜索

标签: regexawksyntax

解决方案


您应该更改$3 ~/variable/ TO $3 ~ variable,因为 a/../包含正则表达式而不是变量。因此,在您的情况下,它将尝试搜索“字符串”命名变量而不是“变量”命名变量。


推荐阅读