这是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)
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)中的所有行.这个解决方案有两点需要注意:
100aap转换为100,并打印出来.005转换为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)