在 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 检查是否完全匹配。
使用 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 检查是否完全匹配。