2015-10-18 25 views
2

在過去的幾個小時裏,我一直試圖用awk來弄清這個愚蠢的東西,但到目前爲止還沒有運氣。 我知道如何繪製每秒線,例如:在awk中合併if和NR

awk 'NR%2' file 

而且我也明白如何打印基於列的文件,如果一列是在特定範圍內,例如:

awk '{if ($1 > 'yourvalue') print}' file 

我不明白的是如何將兩者結合起來。 在practize,如果我有一個文件組織爲:

1 3 6 8 
2 8 4 5 
3 9 8 7 
4 7 3 5 
5 7 3 6 
6 2 4 6 
7 1 4 7 
8 3 2 1 
9 7 5 3 
10 4 5 6 
11 8 2 5 

我怎樣才能得到,例如:

1 3 6 8 
3 9 8 7 
5 7 3 6 
7 1 4 7 
8 3 2 1 
9 7 5 3 
10 4 5 6 
11 8 2 5 

每兩行那麼回事,如果列1比7和打印較小的正常的休息。 我試圖將所有內容合併到一行中,但我總是遇到錯誤。

回答

2

您可以扭轉第二條件,使用或使用條件將它們結合起來:

awk 'NR%2 || $1>=7' file 
1 3 6 8 
3 9 8 7 
5 7 3 6 
7 1 4 7 
8 3 2 1 
9 7 5 3 
10 4 5 6 
11 8 2 5 
+0

這似乎工作,但如果我想打印一行並刪除以下兩個會發生什麼?例如: 1 3 6 8- 4 7 3 5- 7 1 4 7- 8 3 2 1- 9 7 5 3- 10 4 5 6- 11 8 2 5- – eikonal

+0

那麼這一個似乎是一個不同的問題,不是嗎?您應該編輯問題以顯示輸入和預期輸出。 – anubhava

1

您可以結合使用&&(和)和||(或)條件。 您可以在嵌套條件中使用括號。 例如:

awk 'cond1 && (cond2 || cond3)' file 

此:

awk '{if ($1 > 7) print}' file 

...是相同的:

awk '$1 > 7 { print }' file 

...因爲你可以寫以外的{...}作爲使用條件過濾器

...這相當於:

awk '$1 > 7' file 

...因爲默認操作是打印。