使用awk搜索具有多个数字的行

AWE*_*AWE 7 awk

这是file1

200
201
202
203
204
205
2001
2002
2003
2004
2005
Run Code Online (Sandbox Code Playgroud)

是否有一个awk oneliner在第一个字段中只找到三位数的行?

Lee*_*ton 14

awk '$1 ~ /^[0-9][0-9][0-9]$/' file1
Run Code Online (Sandbox Code Playgroud)

这将匹配第一个字段($1)与三个数字(请注意由^和表示的强制启动和停止范围$).然后打印整行($0).{print $0}正则表达式匹配后不需要a ,因为默认操作是打印行.

如果要在正则表达式中使用区间表达式运算符{},则需要使用gawk--posix切换:

gawk --posix '$1 ~ /^[0-9]{3}$/' file1
Run Code Online (Sandbox Code Playgroud)

  • @MichaelJ.Barber 自 gawk 4.0 起默认启用“{}”范围。在早期版本中,您需要传递“-W re-interval”或“-W posix”(或等效的 GNU 长选项)才能启用它。 (2认同)

sch*_*hot 10

如果我们可以假设第一个字段只包含数字:

awk 'length($1) == 3' file1
Run Code Online (Sandbox Code Playgroud)

如果没有,请使用其中一个正则表达式解决方案.


替代解决方案:

awk '$1 >= 100 && $1 <= 999' file1
Run Code Online (Sandbox Code Playgroud)

打印第一个字段的数值在范围(100,999)中的所有行.这个解决方案有两点需要注意:

  1. 100aap转换为100,并打印出来.
  2. 005转换为5,并且不打印.


Mic*_*ber 5

这是一个:

awk '$1 ~ /^[[:digit:]]{3}$/' file1
Run Code Online (Sandbox Code Playgroud)

或者,如果您更喜欢范围而不是POSIX字符类:

awk '$1 ~ /^[0-9]{3}$/' file1
Run Code Online (Sandbox Code Playgroud)