对于落在某个范围内的值,获取相应的值

对于落在某个范围内的值,获取相应的值

我正在考虑使用 awk 从参考文件中的输入文件中搜索值,并从参考文件中获取相应的值。

参考文件和输入文件都可以相应地基于 $3 和 $2 进行排序(我想如果它们排序的话会更容易)。参考文件:

ID3  A    16553824    16561652    -1
ID4  A    22629640    22630440    -1
ID1  A    26607738    26607962    -1
ID2  A    28571020    28571736    -1

输入文件:

A 16553900 16554000 -1
A 26607800 26607900 -1
A 28571050 28571100 -1

我想将输入 $2 与参考 $3 和 $4 进行比较。如果引用$3 < 输入$2 < 引用$3,则相应行将被分配给输入$5 中的引用$1。所以它看起来像:

期望的输出:

A 16553900 16554000 -1 ID1
A 26607800 26607900 -1 ID3
A 28571050 28571100 -1 ID4

答案1

在我看来,您想要的输出是错误的。

awk '
    NR == FNR {min[$1]=$3; max[$1]=$4; next}
    {
        for (id in min) 
            if (min[id] < $2 && $2 < max[id]) {
                print $0, id
                break
            }
    }
' reference input
A 16553900 16554000 -1 ID3
A 26607800 26607900 -1 ID1
A 28571050 28571100 -1 ID2

相关内容