shell 检查并合并重叠范围

vsikbqxv  于 2023-01-26  发布在  Shell
关注(0)|答案(1)|浏览(106)

如何检查范围是否与其他范围重叠并合并重叠的范围?
示例:

10-1000,15-350,50-1500,2100,1700-1800,45,40,145,2-1300

我想要的结果是:

2-1500,1700-1800,2100

我试着制定一个如何编码的计划,但是毫无进展。有没有一个有用的软件包可以使用?如果没有,我应该采取什么方法?

8tntrjer

8tntrjer1#

使用sortawk

tr , '\n' | sort -n | awk '
BEGIN {
  FS = OFS = "-"
}
NF == 1 {
  $2 = $1
}
$2 <= end {
  next
}
$1 <= end {
  end = $2
  next
}
{
  emit()
  start = $1
  end = $2
}
END {
  emit()
}
function emit() {
  if (NR != 1) {
    if (start == end)
      print start
    else
      print start, end
  }
}' | paste -sd,
$ sh ./merge.sh <<<10-1000,15-350,50-1500,2100,1700-1800,45,40,145,2-1300
2-1500,1700-1800,2100

相关问题