在 awk 中使用通配符

using a wildcard in awk

使用 awk,我想打印所有在第一列中以 22_ 开头的字符串的行

我尝试了以下方法,但显然 * 不能用作 awk 中的通配符:

awk '=="22_*" {print [=10=]}' input > output

这在 awk 中可行吗?

让我们从测试文件开始:

$ cat >file
22_something keep
23_other omit

只保留以 22_:

开头的行
$ awk '/^22_/' file
22_something keep

或者,如果您希望明确引用第一个字段,我们可以使用:

$ awk ' ~ /^22_/' file
22_something keep

请注意,我们不必在条件后写 {print [=14=]},因为这正是 awk 与条件关联的默认操作。

在正则表达式的开头,^ 匹配一行的开头。因此,如果您希望 22_ 出现在一行的开头或字段的开头,您需要编写 ^22_

在条件 ~ /^22_/中,注意运算符是~。该运算符告诉 awk 检查前面的字符串 ~41, matches the regular expression^22_. If we were to use+in place of~`,我们会要求 awk 检查是否完全匹配。