免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: 小小脑
打印 上一主题 下一主题

[文本处理] 如何处理有重复或者有重叠的数据 [复制链接]

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
11 [报告]
发表于 2019-02-20 20:02 |只看该作者
你把你的数据贴上来,附带说明哪些不对的,这样才好处理。

或者你自己学习一下,别人帮做作业,是没办法知道你真正的意图的,里面一个逻辑不符合要求,结果就不对了。

大致框架都是这样,如果你有逻辑上的问题,或者思路问题,可以再来讨论。

论坛徽章:
0
12 [报告]
发表于 2019-02-21 11:23 |只看该作者
回复 11# expert1


数据太多,我以附件形式上传了。
我的最终目的是ID相同时,行与行间存在起始位置与终止位置有重叠(即区间有overlap)的去除,保留分值高的行

我用代码输入3次后的结果(重叠应该去除完全)跟原始数据用下面代码比对了下:

awk 'NR==FNR{a[$2$3]=$0;next}{print $0"\t"a[$2$3]}' resultfile datafile


发现去除的行数据形式好像都在代码中出现了,麻烦大神再看下是啥原因。








原始数据.rar

15.62 KB, 阅读权限: 100, 下载次数: 1

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
13 [报告]
发表于 2019-02-23 16:58 |只看该作者
本帖最后由 expert1 于 2019-02-23 20:06 编辑

回复 12# 小小脑

我之前的逻辑也有些问题,忘了区间的合并问题。
处理了一下数据。

awk -v OFS="\t" '$2>$3{print $1,$3,$2,$4,"tag"}$2<$3{print}'  file > file.new
上面是如果$2>$3, 交换,然后添加一个标记。

然后数据会出现
Chr5    22618110        22618266        291     tag # 这个标记就是说$3<$2的列。


再sort -k1,1 -k2n 让$2升序。这样比较好比较了。因为$2升序排列后,下一行是 大于或者等于 上一行。


最后

awk 'NR==1{temp=$0;key=$1;begin=$2;end=$3;max=$4;range=$3-$2 }NR>1{

if(key==$1 ) {

        #$2>end, 由于$2<=$3,那么$3默认就是大于end, 不重合了。

        if( $2 >end  ) {

                print temp;

                temp=$0;key=$1;begin=$2;end=$3;max=$4;range=$3-$2

        }

        else  {

               # 如果重合,而且$3超出上一个值,要赋给end.

                if ($3 >end ) end=$3

                # 取最大的$4

                if ( max<=$4 ) {max=$4; temp=$0 }

                # 值相同,取最大区间的行
                if ( max==$4 ){

                        if (range <($3-$2) ) {max=$4; temp=$0}

                }

        }
}
else {
        print temp;

        temp=$0;key=$1;begin=$2;end=$3;max=$4;range=$3-$2


        }

}END{print temp}' file
Chr1    2157109 2157660 808
Chr1    3360540 3360660 219     tag
Chr1    3780765 3781512 1360
Chr1    3785281 3785720 797
Chr1    4410950 4411120 233     tag
Chr1    5691756 5691938 300
Chr1    6302607 6303156 776
Chr1    6538418 6538589 244
Chr1    6543373 6543536 230
Chr1    6704196 6704365 231
Chr1    6709162 6709324 230
Chr1    7714707 7715145 767
Chr1    7717356 7718103 1282
Chr1    7722108 7722547 769
Chr1    10696714        10696898        320
Chr1    10916029        10916151        159
Chr1    11793805        11794079        508
Chr1    12570622        12570840        300     tag
Chr1    12664517        12664679        263     tag
Chr1    12673153        12673968        1219    tag
Chr1    12679988        12680165        246     tag
Chr1    12845527        12845721        268
Chr1    13181862        13182085        326     tag
Chr1    13186958        13187277        562
Chr1    13211963        13212054        154     tag
Chr1    13212867        13213084        322     tag
Chr1    13507780        13508921        1485    tag
Chr1    13514806        13515963        1594    tag
Chr1    13644552        13644710        230     tag
Chr1    13654168        13654366        279     tag
Chr1    13659274        13660438        1899
Chr1    13666402        13667557        1853
Chr1    13711662        13712500        1282
Chr1    13748252        13748442        265     tag
Chr1    13768440        13768755        424     tag
Chr1    13781513        13781647        182
Chr1    13785915        13786614        1131
Chr1    13786687        13787958        2104
Chr1    13793494        13794661        1947
Chr1    13796499        13798261        2381    tag
Chr1    13818567        13818942        641
Chr1    13823513        13823888        641
Chr1    13862959        13864719        2904    tag
......

自己再处理一下,把tag的行,$3,$2交换一下就可以了。






论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
14 [报告]
发表于 2019-02-23 16:58 |只看该作者
回复 12# 小小脑
发重复了,删掉,搞了半天,你是不是得发个红包感谢一下?

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
15 [报告]
发表于 2019-02-23 17:06 |只看该作者
本帖最后由 expert1 于 2019-02-23 17:10 编辑

发重复了,删了。

论坛徽章:
0
16 [报告]
发表于 2019-02-24 09:25 |只看该作者
回复 14# expert1

嗯嗯,感谢。近的话请吃饭,远的话红包。可否?

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
17 [报告]
发表于 2019-02-25 12:30 |只看该作者
回复 16# 小小脑

开玩笑的,达到你的要求就可以了。

论坛徽章:
0
18 [报告]
发表于 2019-02-26 09:08 |只看该作者
回复 17# expert1

没开玩笑,一个问题也是麻烦你好久,只是我不知道如何能联系到你
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP