热门以匹配AWK中的数字

时间:2013-11-19 05:05:01

标签: gawk

我想让awk打印输入中的所有数字,所以我写了

echo 2 1a 12121 -1212 abc | 
awk ' { for (i=1;i<=NF;i++) if ($i ~ /[-.0-9]*/) print $i; } '

我想说的是'字符串由'0-9'组成。' ' - ',但在输出中打印出每个字段,我做错了什么?

2 个答案:

答案 0 :(得分:1)

你想这样吗?

echo 2 1a 12121 -1212 abc | awk '{ for (i=1;i<=NF;i++) if ($i ~ /-?[0-9]+\.?[0-9]*$/) print $i; }'

答案 1 :(得分:1)

/[-.0-9]*/

这意味着零个或多个号码,.-
由于abc确实包含上面的零个字符,因此将打印出来。

更改为+,表示一个或多个:

PS这也会打印一个.和一个-

的字段
echo "2 1a 12121 -1212 abc .  more -  hey 45.62" |  awk '{for (i=1;i<=NF;i++) if ($i~/[0-9.-]+/) print $i}'
2
1a
12121
-1212
.
-
45.62

所以我会用这样的东西来打印数字:

echo "2 1a 12121 -1212 abc .  more -  hey 45.62" |  awk '{for (i=1;i<=NF;i++) if ($i~/^-?[0-9]+\.?[0-9]*$/) print $i}'
2
12121
-1212
45.62

^字段开始
-?包含一个-或没有 /[0-9]+\.?[0-9]*/
[0-9]+一个或多个数字
\.? 0或1 .
[0-9]*零个或多个数字
提案结束$