2013-12-10 27 views
1

我需要在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])。

任何建議如何做第二個條件?

回答

2

使用算術比較,而不是正則表達式:

$1 >= 7 && $1 < 15 
+0

我之所以使用正則表達式,是因爲我想在'。'之後包含數字。因爲他們正在改變整個數據。 – SimpleNEasy

+0

我不知道你是什麼意思。你能舉一個例子,其中的正則表達式可以工作,但這個答案不是嗎? – Barmar

+0

注意,既然你想要以'14.'開頭的東西,我就用'<15',而不是'<= 14'。 – Barmar

1

^[7-14]\..*失敗的原因,是因爲它是匹配7-1然後4

其實這個角色類是完全無效的,因爲7出現在1之前。


你需要這樣做:

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

這是包含7-910-14之間的交替非捕獲組。 如果第一場比賽失敗,它將嘗試第二場比賽。

我還指定了^ $匹配的換行符(?m),因爲它在我的測試中沒有失敗。

0

使用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解決方案更好。