我需要在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])。
有任何建议如何做第二个条件?
答案 0 :(得分:2)
使用算术比较,而不是正则表达式:
$1 >= 7 && $1 < 15
答案 1 :(得分:1)
^[7-14]\..*
失败的原因是因为它匹配7-1
,然后匹配4
。
事实上,字符类完全无效,因为7
位于1
之前。
你需要这样做:
(?m)^(?:[7-9]|1[0-4])\..*$
这是一个非捕获组,其中包含7-9
和10-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
解决方案更好。