识别并处理awk中的重叠行

时间:2016-02-23 21:23:54

标签: awk

我有以下排序文件[按排序-k1,1 -k2,2n -k3,3n排序]: 开始和结束坐标由col2& amp; col3,value由col4:

定义
chr11   45643103    45643104    0.005
chr11   45643104    45643108    0
chr11   45643107    45643109    0.007
chr11   45643108    45643110    0.107

我想使用awk程序识别重叠区域,例如这两行

chr11   45643104    45643108    0
chr11   45643107    45643109    0.007

并将输出最宽的拉伸,在整个拉伸过程中获得最高值(来自col4) 因此,根据此示例将输出以下内容:

chr11   45643103    45643104    0.005
chr11   45643104    45643109    0.007
chr11   45643108    45643110    0.107

1 个答案:

答案 0 :(得分:0)

从这样的事情开始,考虑一下状态机。

chr==$1 && $2>=stop && !run {
    print prev;print;stop=$3;run=1
}
chr==$1 && $2>=stop && run {
    print;stop=$3;
}
chr==$1 && $2<stop {
    prev=$0;stop=$3;run=0;
}
chr!=$1  {
    chr=$1;prev=$0;stop=$3;run=0;
}

(未测试的)