使用作为键列1和2,我想删除值增加1的所有行。
输入
1000 1001 140
1000 1002 140
1000 1003 140
1000 1004 140
1000 1005 140
1000 1006 140
1000 1201 140
1000 1202 140
1000 1203 140
1000 1204 140
1000 1205 140
2000 1002 140
2000 1003 140
2000 1004 140
2000 1005 140
2000 1006 140
输出所需
1000 1001 140
1000 1006 140
1000 1201 140
1000 1205 140
2000 1002 140
2000 1006 140
我试过了
awk '{if (a[$1] < $2)a[$1]=$2;}END{for(i in a){print i,a[i];}}' <file>
但由于某种原因,它只保留最大值。
答案 0 :(得分:1)
您的问题陈述未描述您的输出。您想要打印每个连续范围的第一行和最后一行。像这样:
$ awk '$1 > A || $2 > B + 1 {
if(row){print row}; print}
{A=$1; B=$2; row=$0}
END {print}' dat
1000 1001 140
1000 1006 140
1000 1201 140
1000 1205 140
2000 1002 140
2000 1006 140
基本问题只是确定一条线路是否比前一条线路仅多1条线路。唯一的方法是让两条线进行比较。通过存储每行读取的值,您可以将当前行与前一行进行比较。