这是file1
200
201
202
203
204
205
2001
2002
2003
2004
2005
是否有一个awk oneliner在第一个字段中只找到三位数的行?
答案 0 :(得分:14)
awk '$1 ~ /^[0-9][0-9][0-9]$/' file1
这会将第一个字段($1
)与三位数匹配(请注意^
和$
表示的强制开始和停止范围)。然后打印整行($0
)。正则表达式匹配后您不需要{print $0}
,因为默认操作是打印该行。
如果您想在正则表达式中使用区间表达式运算符{}
,则需要使用gawk
和--posix
开关:
gawk --posix '$1 ~ /^[0-9]{3}$/' file1
答案 1 :(得分:10)
如果我们可以假设第一个字段只包含数字:
awk 'length($1) == 3' file1
如果没有,请使用其中一个正则表达式解决方案。
另一种解决方案:
awk '$1 >= 100 && $1 <= 999' file1
打印第一个字段的数值在范围(100,999)中的所有行。 这个解决方案有两点需要注意:
100aap
转换为100
,然后打印出来。005
转换为5
,但未打印。答案 2 :(得分:5)
这是一个:
awk '$1 ~ /^[[:digit:]]{3}$/' file1
或者,如果您更喜欢范围而不是POSIX字符类:
awk '$1 ~ /^[0-9]{3}$/' file1
答案 3 :(得分:2)
awk '/^[0-9][0-9][0-9]([^0-9]|$)/ {print $0}' file
要查找只有3位数字的行,请执行以下操作:
awk '/^[0-9][0-9][0-9]$/ {print $0}' file
答案 4 :(得分:1)
有点不正统,但你也可以这样做 -
[jaypal~/Temp]$ cat text7
200
201
202
203
204
205
2001
2002
2003
2004
2005
[jaypal~/Temp]$ awk 'BEGIN{FS="";} NF<4{print}' text7
200
201
202
203
204
205
答案 5 :(得分:0)
awk '{ if ($1 ~ /^[0-9][0-9][0-9]$/) print $0}' file
请注意,我们使用的是一个reg-ex,它指定了3个char类([..]
内的任何内容),只 0-9。文件的第一个字段表示为$ 1。 '^'和'$'表示字段的开头和结尾。如果我们没有,那么4位或更多位的字段也将匹配。
我希望这会有所帮助。
答案 6 :(得分:0)
awk '{num=$1/1; if (num == $1) if (length($1) == 3) print $0}' file
应与前导零一起使用