Windows下高效处理1.21亿行文本:每行移除固定29字符的工具方案
处理超大文本文件的高效方案
针对1.21亿行的超大文本文件,GUI编辑器(如Notepad++)因需加载全量内容到内存导致卡顿,推荐使用流式命令行工具处理——这类工具逐行读写处理,内存占用极低,速度远超GUI工具。以下是Windows环境下的具体实现:
工具选择
优先选用以下两款GNU开源工具的Windows版本:
- GNU Sed:擅长文本替换,语法简洁
- Gawk:对结构化文本处理更灵活,性能优异
两款工具均可直接下载二进制包,解压后将exe所在路径添加到系统PATH环境变量,即可在CMD/PowerShell中直接调用。
具体命令实现
方法1:使用Sed
利用正则捕获日期部分,移除其后的29个字符:
sed -E "s/^([0-9]{4}\/[0-9]{2}\/[0-9]{2}).{29}/\1 /" 原始文件.txt > 处理后文件.txt
- 解释:
^([0-9]{4}/[0-9]{2}/[0-9]{2})捕获每行开头的日期(格式如2020/05/06),.{29}匹配日期后需移除的29个任意字符,替换为捕获的日期加一个空格,保留后续文件名部分。
方法2:使用Awk
通过字符串截取直接提取目标内容,性能略优于Sed:
awk '{print substr($0,1,10) " " substr($0,40)}' 原始文件.txt > 处理后文件.txt
- 解释:
substr($0,1,10)提取前10位日期字符,substr($0,40)从第40位开始提取后续内容(10位日期+29位待移除字符=39位,第40位为文件名起始),中间添加空格匹配期望格式。
注意事项
- 先取小样本文件测试命令,确认输出符合预期后再处理全量文件
- 输出文件需与输入文件不同名,避免误覆盖原始数据
- 若文件为UTF-8带BOM编码,可添加编码参数(如Sed的
--encoding=utf-8)确保处理正常
内容的提问来源于stack exchange,提问作者David Tait
相关产品推荐
相关产品推荐

