使用普通文本或正则表达式筛选大型文本文件
选择匹配规则,测试正反例,并检查匹配和未匹配的记录。
有效的文本筛选,需要同时准备应该匹配和不应该进入结果的示例。 在将模式应用于大型文件之前,先测试这两组情况。
Sort 的 Filter 支持普通子串匹配或正则表达式。 默认使用普通匹配,反选关闭,未匹配输出开启。
选择字面匹配或模式匹配
如果需要查找一行中任意位置出现的特定文本,请使用普通子串。 子串匹配并不自动等同于完整字段或整行比较。
例如,字面子串 status=ready 也出现在 status=ready_later 中。
接受规则之前,先确定这个更长的值是否应该进入结果。
正则表达式可以描述更具体的结构。标点符号在其中具有含义, 因此从其他工具复制的表达式,需要按这里接受的语法进行受控测试。
反选会颠倒匹配规则选中的一侧。请明确记录这一设置; 反选运行与普通运行都可能正确,但输出会不同。
测试匹配与未匹配的情况
下面的合成样本展示了可能产生误导的子串:
job-1 status=ready
job-2 status=waiting
job-3 status=ready_later 字面搜索 status=ready 会匹配第一行和第三行。
如果只想得到第一行,就需要进一步完善规则。
只看行数减少,无法发现这个问题。
从不含敏感信息的测试数据中,加入格式错误、空字段和有代表性的长记录。 检查保存的完整记录,避免把看似局部的匹配误认为已经规范化的记录。
使用正则表达式时,既要确认正例进入输出,也要确认反例被排除。 避免一次同时更改多个设置。
检查两类输出
Filter 将选中的记录写入 filtered.txt。
开启未匹配输出时,另一组记录保存在 unmatched.txt 中。
评估期间请保留两者。
关闭未匹配保存,会改变实际写出的文件, 但不会让被排除记录的分类计数消失,也不会改变所选规则的含义。
筛选本身不会验证账户访问、修复数据, 也不能证明每条选中记录在语义上都正确。 请将匹配结果用于事先定义的任务。
对于已经完成的操作,核对选中和未选中记录是否与输入范围相符。 处理被中断时,保留完成状态,以明确尚未检查的剩余部分。
如果结果对下一个应用仍然过大,可以使用 Splitter 创建更小的分块。 下游流程需要唯一记录时,再单独使用 Deduper。

