我试图找出范围 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
谢谢。