格式如下:
A 20 56
B 40 68
A 207 236
C 136 152
B 86 121
A 95 110
B 161 186
A 145 170
第一列为元素,可以理解为坐标,第二列和第三列分别为元素的起点和终点,同一元素可以有多段,现要找出起止点范围内没有其他的元素出现,上述
数据即A的第4段符合。
A 207 236
简单理解为,只要文件里任意两行有交集,则舍弃。
易懂版(效率低,需要展开$2~$3)
awk '{a[$1" "$2" "$3];for(i=$2;i<=$3;i++)b[i]++}END{for(j in a){split(j,m," ");flag=1;for(k=m[2];k<=m[3];k++)if(b[k]>1){flag=0;break}}if(flag==1){print j}}'
或者更加难懂的:)
-
[root@linux ~]# awk 'NR==FNR{ a[$1" "$2" "$3]=$1; line++ }NR>FNR{
-
-
counter=0
-
-
for(i in a)
-
-
{
-
split(i,m," ")
-
-
if($3m[3] || (m[2]==$2 && m[3]==$3))
-
-
counter++
-
-
else next
-
-
if(counter == line)
-
-
print $0
-
-
}
-
-
}' file file
-
A 207 236
阅读(847) | 评论(0) | 转发(0) |