我有一个范围列表,我正在尝试合并彼此给定距离内的条目。
在我的数据中,第二列包含范围的下限,第三列包含上限。 逻辑如下:如果第2列中的值小于或等于任何其他行的第3列中的值加上给定值,则打印前一行的第2列中的条目和给定行的第3列中的条目
如果两个范围位于变量' dist'指定的距离内,则应合并它们,否则应按原样打印行。如果合并产生的行位于' dist' dist任何其他行,这些也应该合并。
我希望这只针对第一列匹配的行。
输入:
1 1 9
1 10 19
1 30 39
2 40 49
2 50 59
2 60 69
如果dist = 10,所需的输出:
1 1 19
1 30 39
2 40 69
使用awk,我已经尝试过以下几点:
awk -v dist=10 'NR=FNR { a[FNR] = $1; b[FNR] = $2; c[FNR] = $3; next; }
{
for (i in a)
if ($1 == a[i]) {
for (i in c)
if ($2 <= (c[i]+dist) {
print c[i], $2; }
else {
print $1, $2; }
}
}' infile
这会返回语法错误。
任何帮助表示赞赏!