如何在Notepad++中搜索连续数字序列并合并为起止数值对
连续帧序列合并实现方法
核心逻辑是判断相邻行的连续关系:前一行的第二个数值等于后一行的第一个数值时,两段属于同一连续序列,否则为新序列的起点。
方法1:Python脚本实现(适合需要二次开发的场景)
假设你的原始数据存放在cut_points.txt中,每行为一个帧号:帧号的序列,运行以下脚本即可直接输出合并后的结果:
# 初始化连续段的起止帧号 seg_start = None seg_end = None with open("cut_points.txt", "r", encoding="utf-8") as f: for raw_line in f: # 跳过空行 line = raw_line.strip() if not line: continue cur_left, cur_right = map(int, line.split(":")) # 处理第一行数据 if seg_start is None: seg_start = cur_left seg_end = cur_right continue # 判断当前行是否和上一段连续 if cur_left == seg_end: seg_end = cur_right else: # 输出已结束的连续段 print(f"{seg_start}:{seg_end}") # 初始化新的连续段 seg_start = cur_left seg_end = cur_right # 输出最后一个未处理的连续段 print(f"{seg_start}:{seg_end}")
如果需要直接保存结果到新文件,将print语句替换为文件写入操作即可。
方法2:AWK单行命令(适合终端快速处理)
直接在终端运行以下命令,即可直接将合并结果输出到merged_points.txt:
awk -F ':' '{if(NR==1){s=$1;e=$2}else{if($1==e){e=$2}else{print s":"e;s=$1;e=$2}}}END{print s":"e}' cut_points.txt > merged_points.txt
参数说明:
-F ':'指定用冒号作为字段分隔符- NR为当前处理的行号,第一行初始化连续段的起始值
s和结束值e - 后续每行判断当前行第一个字段是否等于上一段的结束值,是则更新结束值,否则输出上一段并开启新段
- 遍历结束后输出最后一个连续段
两种方法都可以完美处理你给出的示例输入,输出结果为19068:19076。
内容的提问来源于stack exchange,提问作者user10246830
相关产品推荐
相关产品推荐

