mcpField
L
large-scale-text-editing

large-scale-text-editing

github.com/letta-ai数据与数据库15243 次安装4 周前更新
代码仓库

关于 large-scale-text-editing

这项技能介绍如何规划并验证超大型文本文件的转换,适用于分隔数据和重复编辑任务,涵盖抽样、工具选择、渐进测试及结果核查。

主要功能

  1. 01抽样检查文件而不完整读取
  2. 02选择 Vim、sed、awk、Perl 或 Python
  3. 03将转换拆分为可测试步骤
  4. 04原地修改前备份文件
  5. 05用行数、差异和抽样核验结果

适用场景

  1. 01重排或删除大型分隔文件的列
  2. 02批量应用重复的模式编辑
  3. 03满足击键数或操作次数限制
  4. 04抽查文件不同位置的转换结果

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/letta-ai/skills --skill large-scale-text-editing

安装后在 Claude Code 中输入/large-scale-text-editing确认已加载。

详细介绍

大规模文本编辑

概述

本技能介绍如何高效转换包含数千至数百万行的大型文本文件。内容涵盖理解转换要求、设计高效方案(尤其是使用 Vim 宏)、测试方法和验证技巧。

何时使用此技能

  • 大规模转换 CSV、TSV 或其他分隔符文件
  • 对包含数百万行的文件重复执行编辑
  • 需要遵守击键次数或操作次数限制
  • 使用 Vim 宏、sed、awk 或类似的批处理工具
  • 使用正则表达式进行基于模式的文本转换

方法策略

阶段 1:理解转换要求

编写任何转换逻辑之前:

  1. 先评估文件大小 - 尝试读取文件前,使用 ls -lh 或 wc -l 检查文件大小。避免直接读取数百万行的文件。

  2. 有针对性地抽取样本 - 从多个位置提取样本:

    • 开头:head -n 100 input.csv > sample_head.csv
    • 中间:sed -n '500000,500100p' input.csv > sample_middle.csv
    • 结尾:tail -n 100 input.csv > sample_tail.csv
  3. 比较输入与预期输出 - 确定所有需要执行的转换:

    • 调整列顺序或删除列
    • 更改分隔符
    • 大小写转换
    • 处理空白字符
    • 在值前后追加内容
    • 格式转换
  4. 验证结构假设:

    • 所有行的列数是否一致
    • 是否存在表头行
    • 是否存在空行或格式错误的行
    • 是否存在可能导致正则表达式模式失效的特殊字符
阶段 2:设计解决方案

设计转换方案时:

  1. 将复杂转换拆分为独立步骤 - 每一步只处理一种逻辑转换。这样更便于调试,也可以单独测试各步骤。

  2. 根据规模选择合适的工具:

    • Vim 宏:非常适合复杂的多步骤转换,也便于统计击键次数
    • sed:适用于对大型文件进行简单替换,速度快
    • awk:擅长列操作和条件逻辑
    • Perl/Python:适用于超出正则表达式能力范围的复杂逻辑
  3. 注重效率:

    • 尽量减少遍历文件的次数
    • 使用基于行的操作(Vim 中的 :%normal!),而非使用显式循环逐行处理
    • 优先使用内置命令(例如 Vim 中用于转为大写的 gU),而不是手动逐字符操作
  4. 记录设计决策 - 说明选择特定方案的原因,尤其是在存在多种可行方案时。

阶段 3:逐步测试
  1. 创建测试样本 - 使用较小的子集(100-1000 行)进行初步测试:

    head -n 100 input.csv > test_input.csv
    head -n 100 expected.csv > test_expected.csv
    
  2. 单独测试每项转换 - 将各个宏或命令组合前,先确认其输出正确。

  3. 使用 diff 验证 - 逐字节比较:

    diff test_output.csv test_expected.csv
    
  4. 检查测试输出中的边缘情况:

    • 第一行和最后一行是否正确转换
    • 是否能处理内容长度不同的行
    • 特殊字符是否按预期保留或转换
阶段 4:执行并采取防护措施
  1. 原地修改前创建备份:

    cp input.csv input.csv.backup
    
  2. 设置合适的超时时间 - 对于百万行文件,应预留足够的处理时间(例如,根据复杂程度预留 2-5 分钟)。

  3. 尽可能监控进度 - 使用可显示进度的工具,或检查中间输出。

  4. 验证最终输出:

    • 确认行数相符:wc -l output.csv
    • 与预期输出进行 diff 比较
    • 抽查文件不同位置的样本

Vim 专用指南

宏设计原则
  • 寄存器分配:为不同的转换阶段使用不同的寄存器(a、b、c)
  • 击键效率:优先使用内置命令,而非逐字符操作
  • 正则表达式模式:使用非贪婪模式和明确的分隔符,避免匹配范围过大
适用于大文件的 Vim 常见模式
任务方法
对所有行应用宏:%normal! @a
转换为大写使用 gU 动作或在替换命令中使用 \U
操作列使用捕获组 \(\) 和反向引用 \1、\2
替换分隔符:s/old_delim/new_delim/g
移除空白字符:s/\s\+//g
Vim 脚本中的转义

使用 setreg() 定义宏时:

  • 转义反斜杠:用 \\ 表示字面反斜杠
  • 使用 \r 表示回车符
  • 特殊字符可能需要双重转义

验证清单

确认任务完成前:

  • 输出文件存在且非空
  • 行数与预期一致
  • 与预期输出进行逐字节比较后通过(如果有预期输出)
  • 抽查文件开头、中间和结尾的样本
  • 满足所有约束(击键次数限制、命令限制等)
  • 工具以成功代码退出(退出代码为 0)

常见问题

问题预防措施
直接读取大文件始终先检查文件大小;使用 head/tail/sed 抽样
原地编辑前未备份修改前创建备份副本
只在前几行测试从文件的多个位置抽样
假定结构均匀一致使用不同位置的样本验证结构
正则表达式匹配过度使用明确的分隔符和非贪婪量词
超时时间不足根据文件大小计算预期处理时间
未验证退出代码操作后检查工具退出状态

效率注意事项

当击键次数或操作次数很重要时:

  1. 准确计数 - 理解特定上下文中“击键”的定义(转义序列、特殊按键)
  2. 合并操作 - 一条正则替换命令可能替代多个简单操作
  3. 使用内置命令 - 原生命令通常比手动实现更高效
  4. 减少冗余 - 避免重复读取文件或重复转换

评论

支持 Markdown