2017-02-17 19 views
-1

該輸入文件具有2列,column 1具有數字和column 2row2-row1column1之間的距離:awk的刪除兩個行基於一個行

30 30 
40 10 
60 20 
110 50 
130 20 
180 50 
190 10 

如果column2<20的值,我想移除這條線和這條線之上的一條線,因爲這兩個數據點的距離很小,並且必須移除兩條線。

期望輸出:

60 20 
110 50 
130 20 

或者,如果有人知道如何減去column 1row1-row2,並生成以下輸出,那麼也許可以通過awk '$2<20 || $3>-20'篩選出這兩點?

輸出:

30 30 -10 
40 10 -20 
60 20 -50 
110 50 -20 
130 20 -50 
180 50 -10 
190 10 

感謝您的幫助!

+0

試'的awk「$ 2> = 20」 file' –

+0

謝謝你的快速回復並提供問題格式幫助。我必須更改上行第2列包含數字> 20 – Ellie

+0

您的問題已標記爲** [tag:awk] **,但在您的問題中沒有看到任何awk代碼。請將您的工作添加到目前爲止,我們會盡力幫助您解決問題。 – ghoti

回答

1

變得更容易通過顛倒輸入線明智

$ tac ip.txt 
190 10 
180 50 
130 20 
110 50 
60 20 
40 10 
30 30 

現在,如果第二列的值是< 20來處理,不打印線和一個跟隨它。在此之後,再次反轉

$ tac ip.txt | awk '$2<20{getline; next} 1' | tac 
60 20 
110 50 
130 20 
  • getline將獲取下一個記錄和next將跳過的代碼的其餘部分。實際上,這將跳過與第二列的值小於20,線線以下是
  • 1慣用的方法來打印當前記錄
+0

謝謝!這個命令工作得很好!你能否詳細解釋一下awk命令? – Ellie

+0

@Ellie增加了一些細節,也會建議https://www.gnu.org/software/gawk/manual/gawk.html和https://stackoverflow.com/documentation/awk/topics – Sundeep

+0

非常感謝! ! – Ellie