【发布时间】:2019-01-06 23:08:40
【问题描述】:
我有一个包含范围的文件。我想要列表中的最高范围并删除其他小的重叠范围:
chr1A 77568 86766
chr1A 203138 204427
chr1A 204428 222994
chr1A 204428 206534
chr1A 206538 207965
chr1A 207967 213097
chr1A 213098 221111
chr1A 213098 213863
chr1A 213864 214195
chr1A 214196 221111
chr1A 221112 222994
chr1A 222995 223876
chr1A 223882 227109
chr1A 305432 314629
chr1A 323643 325976
chr1A 431741 451601
chr1A 431741 435137
chr1A 435141 436568
chr1A 436570 441700
chr1A 441701 449710
chr1A 441701 442466
chr1A 442467 442798
chr1A 442799 449710
chr1A 449711 451601
例如:
第一个和第二个范围是唯一的,因此它们被保留。
第 3 到第 11 个范围有重叠,只保留最高的一个 chr1A 204428 222994,依此类推。
我想要这样的输出:
chr1A 77568 86766
chr1A 203138 204427
chr1A 204428 222994
chr1A 222995 223876
chr1A 223882 227109
chr1A 305432 314629
chr1A 323643 325976
chr1A 431741 451601
我希望在 perl、bash 或任何其他 unix 工具中获得解决方案。谢谢
【问题讨论】:
-
我会首先通过明确应该如何合并范围来解决这个问题。例如,我想到了这个问题: 问题:22295 223876 行:a)与上面的结合是否只有 204428 到 223876? b)如果那条线是 22293 223876 怎么办 - 那会让你留下 204428 到 223876 吗?然后我会实现一个功能来合并范围。到目前为止,您尝试过什么?
-
您要聘请程序员吗?或者你有什么问题吗?
-
我希望能找到解决办法……我希望明天早上有一辆新车出现在我的车库里,但我没有屏住呼吸。跨度>
-
您需要帮助的 Perl 代码在哪里?