如何修复文本CDR文件中的错误换行问题
CDR文件错误换行批量修正方案
核心判断逻辑:正常的CDR记录均以20xx-xx-xx格式的日期开头,所有非该格式开头的行均为上一条记录被错误拆分的部分,直接拼接至上一行末尾即可完成修复。
方案1:Linux/macOS 快速处理(awk命令,大文件性能最优)
直接在终端执行以下命令,自动完成所有错误行修正:
awk '/^20[0-9]{2}-/{if (buf) print buf; buf=$0; next} {buf = buf $0} END{print buf}' your_cdr_file.txt > fixed_cdr_file.txt
- 命令说明:
- 遇到以
20xx-开头的行时,先输出上一条缓存的完整记录,再将当前行存入缓存 - 非日期开头的行直接拼接至缓存内容末尾
- 所有内容处理完成后输出最后一条缓存记录
- 遇到以
- 执行后会生成新的修正后文件
fixed_cdr_file.txt,不会修改原文件,避免数据损坏。
方案2:跨平台Python脚本(Windows/macOS/Linux通用)
新建fix_cdr.py文件,写入以下代码:
import sys def fix_cdr(input_path, output_path): buffer = "" with open(input_path, 'r', encoding='utf-8') as f_in, open(output_path, 'w', encoding='utf-8') as f_out: for line in f_in: line = line.rstrip('\n') # 适配2010-2039年的日期开头规则,可根据实际CDR时间范围调整 if line.startswith(('201', '202', '203')): if buffer: f_out.write(buffer + '\n') buffer = line else: buffer += line if buffer: f_out.write(buffer + '\n') if __name__ == "__main__": if len(sys.argv) != 3: print("使用方法:python fix_cdr.py 输入CDR文件路径 输出修正后文件路径") sys.exit(1) fix_cdr(sys.argv[1], sys.argv[2])
执行方式:
python fix_cdr.py your_cdr_file.txt fixed_cdr_file.txt
验证修正结果
Linux/macOS 下可执行以下命令检查是否还有残留的错误行(即非日期开头的行),无输出则说明所有错误行已修复:
grep -v "^20[0-9]\{2\}-" fixed_cdr_file.txt
注意事项
- 处理前请先备份原CDR文件,避免操作失误导致数据丢失
- 若CDR文件编码不是UTF-8,可修改Python脚本中
open函数的encoding参数适配对应编码
内容的提问来源于stack exchange,提问作者Baljot Singh
相关产品推荐
相关产品推荐

