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
相关产品推荐
相关产品推荐

