在awk中提取范围正则表达式

时间:2013-12-10 01:57:52

标签: regex awk

我需要在awk脚本中应用两个条件。在每种情况下,我想从列中提取数字范围。

让数据示例:

14.201
14.10
13.3
9.5
10.600
3.74
4.62
6.89
5.90
11.12
7.11
12.53
8.89
8.965

#条件一:我想在3-和6之间提取任何数字(即3,4,5,6),而不管''后面的数字是多少。

$1 ~/^[3-6]\..*/

这种情况似乎有效,但是,我正在努力解决第二个问题: 其中范围在7-14之间。

$1 ~/^[7-14]\..*/

上面给出了一个错误(因为最大值为9. [0-9])。

有任何建议如何做第二个条件?

3 个答案:

答案 0 :(得分:2)

使用算术比较,而不是正则表达式:

$1 >= 7 && $1 < 15

答案 1 :(得分:1)

^[7-14]\..*失败的原因是因为它匹配7-1,然后匹配4

事实上,字符类完全无效,因为7位于1之前。


你需要这样做:

(?m)^(?:[7-9]|1[0-4])\..*$

这是一个非捕获组,其中包含7-910-14之间的替换。 如果第一场比赛失败,它将尝试第二场比赛。

我还在换行符(?m)指定^ $匹配,因为在我的测试中它没有失败。

答案 2 :(得分:0)

使用来自Vasili的awk和一些正则表达式,这似乎可以完成这项任务:

awk '/^([7-9]|1[0-4])\./' file
14.201
14.10
13.3
9.5
10.600
11.12
7.11
12.53
8.89
8.965

Barmars解决方案更好。