抓一份异常日志做归因,第一件事不是读,是把几万行压成几百行不重复的。用「TXT处理」四步就够:删空行、去行首尾空格、删重复行、排序;需要合并同类项再补一次正则替换。顺序错了结果就不对,下面说清为什么。
顺序为什么不能反
先去空格,再去重。两条一模一样的报错,一条末尾多一个空格,在比较时就是两行不同内容——去重会双双留下。所以「去除行首尾空格」必须排在删重复行之前。只含空格的行也算空行,这一条同时能把复制粘贴带进来的假空白清掉。
去重发生在排序之前还是之后,取决于你要什么。想保留每条第一次出现的相对位置(还原事件时间线),就先按原顺序去重再单独排一份统计用的;想直接看频次分布,可以先排序让相同行相邻。去重的规则是保留首次出现的位置,不是保留任意一条后随便放。
数字感知这件事
排序可选按 Unicode 码位或中文拼音,两种都具备数字感知:abc2 会排在 abc10 前面。默认按码位排的话,2 的字符小于 1 后面跟 0,会得到 abc10 在 abc2 之前的反直觉结果,版本号、步骤编号、文件名序列全部乱套。
但数字感知是按段拆数字来比大小,它不理解语义单位。同一批日志里混着 v1.10 与 v1.9 这类点分版本时,仍然可能被拆开误排,这种要人工分段核对。中文选拼音排序时,多音字按默认读音归类,专有名词排序结果可能不合预期。
预览只有 500 行
内容超过 5000 行或 200KB 时,输入输出框只显示前 500 行的预览,而处理、统计与下载仍按完整内容执行。这个设计专门用来坑凭眼睛下结论的人:你以为文件里有两千行,导出后发现只剩几十行是正常的,因为原始行数本来就该由统计项给。判断规模请看统计:行数、字符数(含空白与不含空白两种)、中文字符数,以及按输出编码算出的字节数。
字节数那个指标很实用——邮件正文有长度限制、接口有请求体上限时,你要的是字节而不是字符数。
五步清洗流程
- 上传或粘贴,先看统计里的行数,记住这个数字作为基线。
- 执行去行首尾空格与删空行,行数量级下降说明原来排版噪声很多。
- 删重复行,可勾选忽略大小写(同一错误被不同模块打出大小写不一致的版本时会命中)。
- 按需排序,中英文混合内容优先试拼音档。
- 需要归并同类项时用查找替换,支持区分大小写与 JavaScript 正则语法,界面会显示命中次数——命中数为零通常说明正则里的转义写法不对,别急着以为日志里没有。
边界:输出编码只能选 UTF-8 或 UTF-8 带 BOM,存不出 GBK/ANSI 文件,对方系统要求 GBK 时得下载后用记事本另存为 ANSI。输入侧能自动识别 UTF-8、带 BOM 的 UTF-8 与 GBK/GB18030,不支持 UTF-16、Big5、EUC-KR。全程本地完成、不上传服务器、不需要登录。更多排序细节见 文本去重与排序,入口在 TXT处理。