【问题标题】:awk - print overlapping rangesawk - 打印重叠范围
【发布时间】:2017-12-23 11:49:05
【问题描述】:

恐怕我还没有遇到过直接的方法,尽管我尝试为类似的场景调整一些提供的解决方案(但不完全满足我的需要)。鉴于此数据:

1118 1120
1121 1124
1122 1127
1125 1126
1128 1133
1130 1135
1136 1139
1137 1138
1140 1145

它已经按第 1 列排序。除了第一行和最后一行,其他所有的间隔都成对重叠。所以我想要一个只有重叠范围的输出:

1122 1124
1125 1126
1130 1133
1137 1138

至少对我来说,这比我第一眼预期的要难。

【问题讨论】:

标签: awk overlapping-matches numeric-ranges


【解决方案1】:

这是在 awk 中执行此操作的一种方法。可能有更有效的方法。

awk '{b=e=0; for(i=$1; i<=$2; i++) { if (exists[i]) if(b==0) {b=e=i} else {e=i}; exists[i]=i; } if(b) print b,e; }' input_file

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-02
    • 1970-01-01
    相关资源
    最近更新 更多