如何检查一个文件中的一个数字范围是否是另一个文件的其他数字范围的子集?

如何检查一个文件中的一个数字范围是否是另一个文件的其他数字范围的子集?

我试图找出范围 1 的数字 [a 列和 b 列] 是否是子集或者位于范围 2 的列 [b 列和 c 列] 之间。

范围1

 a       b
15       20
 8       10
37       44
32       37

范围2

 a       b       c
    chr1    6       12
    chr2    13      21
    chr3    31      35
    chr4    36      45

输出:

    a       b       c
chr1    6       12       8       10
chr2    13      21       15      20
chr4    36      45       37      44

我尝试从这段代码中学习 [如果我们想检查单个数字是否在特定范围内,该代码是有效的],因此我尝试修改两个数字的代码。但没有成功,我感觉我无法正确读取第二个文件。

我想比较 range1[a] 与 range2[b] 以及 range1[b] 与 range2[c]。一对多比较。

例如在第一次运行中:range-1 的第一行与 range-2 的所有其他行。但 range1[a] 应该仅与 range2[b] 进行比较,同样,range1[b] 应该仅与 range2[c] 进行比较。仅基于此,我写了一个标准:

lbs[i] && lbsf1[j] <= ubs[i] && ubsf1[j] >= lbs[i] && ubsf1[j] <= ubs[i]

r1[a] r2[b] r1[b] r2[c]
15 > 6      20 < 12     False
15 > 13     20 < 21     True
15 > 31     20 < 35     False
15 > 36     20 < 45     False 

代码:[参考但几乎没有修改]

    #!/bin/bash

awk -F'\t' '
# 1st pass (fileB): read the lower and upper range bounds
FNR==NR { lbs[++count] = $2+0; ubs[count] = $3+0; next }
# 2nd pass (fileA): check each line against all ranges.
{ lbsf1[++countf1] = $1+0; ubsf1[countf1] = $2+0; next }
{
        for(i=1;i<=count;++i)
                {
                        for(j=1;j<=countf1;++j)
                        if (lbsf1[j] >= lbs[i] && lbsf1[j] <= ubs[i] && ubsf1[j] >= lbs[i] && ubsf1[j] <= ubs[i])
                                { print lbs[i]"\t"ubs[i]"\t"lbsf1[j]"\t"ubsf1[j] ; next }
                }
}
' range2 range1

谢谢。

相关内容