You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何判断一个文件中的数值区间是另一文件数值区间的子集

问题排查
  • 重复遍历历史range1行:处理range1每行时,你将当前行追加到lbsf1数组后,遍历了所有已存储的range1行,之前已经匹配过的行每次读新行都会被重新匹配输出,导致结果重复。
  • 遗漏range2的chr列存储:你只存了range2的b、c列区间值,没存第一列的染色体标识,输出不符合要求。
  • 逻辑冗余:不需要存储所有range1的行,处理range1当前行时直接拿当前的a、b值和所有range2区间比对即可,不需要双重循环。
  • 未跳过表头行:两个输入文件都有表头,没有跳过的话会把表头当做数值参与计算,引发错误。
正确实现代码
awk -F'\t' '
# 第一遍读取range2,存储区间和对应chr信息
FNR == NR {
    # 跳过range2表头,输出结果表头
    if (FNR == 1) {
        print "a\tb\tc\ta\tb"
        next
    }
    count++
    chr[count] = $1
    lbs[count] = $2 + 0
    ubs[count] = $3 + 0
    next
}
# 第二遍读取range1,逐行比对所有range2区间
{
    # 跳过range1表头
    if (FNR == 1) next
    curr_l = $1 + 0
    curr_u = $2 + 0
    for (i = 1; i <= count; i++) {
        # 区间完全包含判断可简化为左端点>=区间左、右端点<=区间右
        if (curr_l >= lbs[i] && curr_u <= ubs[i]) {
            print chr[i] "\t" lbs[i] "\t" ubs[i] "\t" curr_l "\t" curr_u
            break
        }
    }
}
' range2 range1

运行上述代码即可得到你需要的预期输出。

内容的提问来源于stack exchange,提问作者vibhu sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 23:57:00