使用 awk,我想打印第一列中包含以 22_ 开头的字符串的所有行
我尝试了以下操作,但显然 * 在 awk 中不能用作通配符:
awk '$1=="22_*" {print $0}' input > output
Run Code Online (Sandbox Code Playgroud)
这在awk中可能吗?
让我们从一个测试文件开始:
$ cat >file
22_something keep
23_other omit
Run Code Online (Sandbox Code Playgroud)
只保留以 开头的行22_:
$ awk '/^22_/' file
22_something keep
Run Code Online (Sandbox Code Playgroud)
或者,如果您更喜欢显式引用第一个字段,我们可以使用:
$ awk '$1 ~ /^22_/' file
22_something keep
Run Code Online (Sandbox Code Playgroud)
请注意,我们不必写{print $0}在条件之后,因为这正是 awk 与条件关联的默认操作。
在正则表达式^的开头,匹配一行的开头。因此,如果您想出现在22_一行的开头或字段的开头,您需要编写^22_.
在条件中$1 ~ /^22_/,注意运算符是~。该运算符告诉 awk 检查前面的字符串,~41 , matches the regular expression^22_ . If we were to use+ in place of~`,我们将改为要求 awk 检查是否完全匹配。