You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shell脚本实现数字合并:含缺失值的连续数字压缩需求

解决方案:合并连续数字为范围提升可读性

可以用一段简洁的awk脚本实现完整需求,既能处理全连续的数字列表,也能正确识别并合并连续段、保留非连续的单个数字:

# 测试示例数据
DATA="1,2,4,5,6,8,10,11,12"
echo "$DATA" | awk -F',' '
{
    start = $1
    end = $1
    for (i=2; i<=NF; i++) {
        if ($i == end + 1) {
            end = $i
        } else {
            printf "%s%s,", start, (start == end ? "" : "-" end)
            start = $i
            end = $i
        }
    }
    # 输出最后一组
    printf "%s%s\n", start, (start == end ? "" : "-" end)
}'

代码说明

  • -F',':指定逗号为字段分隔符,将输入的数字列表拆分为独立字段
  • 初始化start和end为第一个数字,标记当前连续序列的起止
  • 遍历后续每个数字:
    • 如果当前数字与end连续(等于end+1),则更新end扩展连续序列
    • 如果不连续,先输出当前序列:若起止相同则输出单个数字,否则输出起始-结束格式的范围,随后重置起止为当前数字
  • 循环结束后处理最后一组序列,避免遗漏

测试用例验证

  • 全连续列表:DATA="1,2,3,4" → 输出 1-4
  • 含非连续段的列表:DATA="1,2,4,5,6" → 输出 1,2,4-6
  • 单个数字:DATA="7" → 输出 7
  • 多段非连续:DATA="3,5,6,7,9" → 输出 3,5-7,9

内容的提问来源于stack exchange,提问作者paul24682

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 06:35:51