任何达到它的人都有点棘手
我想找出一种在perl或bash / sh脚本中执行此操作的方法
我在下面有预期的输入和输出,并解释了它的含义,但无法真正理解我将如何实现这一目标
在这些文件中想到
column 1 - an indicator, those indicated with 'a' have no relation to those indicated with 'b' or 'c'
column 2 - the beginning of a range
column 3 - the end of a range
column 4 - a count, how many times something occurs
现在我有像
这样的文件a 870 1470 58
a 870 5440 11
a 1470 3080 37
a 3080 3210 48
a 3080 5440 23
a 3210 4360 44
a 4360 5440 247
b 0 1090 10
b 0 4090 11
b 1090 3550 37
c 0 1250 10
c 1000 1500 5
c 1300 1700 5
c 1700 1900 12
我想创建类似
的文件a 870 1470 69
a 1470 3080 48
a 3080 3210 82
a 3210 4360 78
a 4360 5440 281
b 0 1090 21
b 1090 3550 48
b 3550 4090 11
c 0 1000 10
c 1000 1250 15
c 1250 1300 5
c 1300 1500 10
c 1500 1700 5
c 1700 1900 12
...
输出说明:
The a's
行a1(870-1470)中的范围完全封装在第2行(870-5440)的范围内,因此870-1470范围内的出现次数为69
a 870 1470 69
行a3(1470-3080)中的范围也完全封装在第2行中,因此第3行的范围出现是48
a 1470 3080 48
第a4行(3080-3210)中的范围完全封装在第5行(3080-5440)和第2行(870-5440)的范围内,因此该范围的出现次数为82
a 3080 3210 82
The b's
行b1(0-1090)中的范围封装在行b2(0-4090)的范围内,因此0-1090范围内的出现量实际为21
b 0 1090 21
行b3(1090-3550)中的范围封装在行b2的范围内,因此1090-3550范围内的出现量实际为48
b 1090 3550 48
现在输入文件中未列出范围3550-4090,但此范围是行b2中尚未计算的范围的剩余部分,因此发生的次数为11
b 3550 4090 11
The c's
行c1(0-1250)中的范围与行c2(1000-1250)中的范围重叠,行c3(1300-1500)中的范围与行c2中的范围重叠。 将0-1000的范围包含在一起,其中没有其他范围重叠,因此该范围发生的次数为10
c 0 1000 10
行c1(1000-1250)范围的其余部分封装在行c2(1000-1500)的范围内,因此(1000-1250)范围发生15次
c 1000 1250 15
行c2中有一个范围与任何东西都不重叠(1250-1300),因此发生的次数为5
c 1250 1300 5
行c2(1300-1500)中的剩余范围封装在行c3(1300-1700)内,因此1300-1500范围发生的次数为10
c 1300 1500 10
第c3行(1500-1700)范围的其余部分与任何内容都不重叠并且发生5次
c 1500 1700 5
c4中的范围在任何地方都没有重叠,发生12次
c 1700 1900 12
感谢 - 你!