awk基于一行删除两行

时间:2017-02-17 22:18:00

标签: awk

输入文件有2列,column 1包含数字column 2row2-row1column1之间的距离为:

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

如果column2<20中的值,我想要移除此行并在此行之上一行,因为这两个数据点的距离很小,并且必须删除这两行。

期望输出:

60  20 
110  50
130  20

或者,如果有人知道如何减去column 1 row1-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  

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

通过反转输入线来变得更容易处理

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

现在,如果第二列值<&lt; 20,则不要打印该行以及该行后面的行。之后,再次反转

$ tac ip.txt | awk '$2<20{getline; next} 1' | tac
60  20
110  50
130  20
  • getline将获取下一条记录,next将跳过其余代码。实际上,这将跳过第二列值小于20及其后面的行
  • 的行
  • 1以惯用方式打印当前记录