awk / bash:比较所有行中的不同列以合并范围

时间:2017-10-12 14:48:28

标签: bash awk

我有一个范围列表,我正在尝试合并彼此给定距离内的条目。

在我的数据中,第二列包含范围的下限,第三列包含上限。 逻辑如下:如果第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

这会返回语法错误。

任何帮助表示赞赏!

0 个答案:

没有答案