![对于落在某个范围内的值,获取相应的值](https://linux22.com/image/60613/%E5%AF%B9%E4%BA%8E%E8%90%BD%E5%9C%A8%E6%9F%90%E4%B8%AA%E8%8C%83%E5%9B%B4%E5%86%85%E7%9A%84%E5%80%BC%EF%BC%8C%E8%8E%B7%E5%8F%96%E7%9B%B8%E5%BA%94%E7%9A%84%E5%80%BC.png)
我正在考虑使用 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