输入文件有2列,column 1
包含数字column 2
,row2-row1
与column1
之间的距离为:
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
感谢您的帮助!
答案 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
以惯用方式打印当前记录