如何删除文本文件中长度大于1GB的行并保留更短的行
超长行过滤方案
方法1:awk(Linux环境首选,效率高)
GNU awk(绝大多数Linux发行版默认自带)没有内置行长度限制,处理超长行性能优异:
- 按字节过滤(你说的1GB是文件存储大小时选这个,1GiB=1073741824字节):
awk -b 'length($0) < 1073741824' 原文件名 > 输出文件名 - 按字符过滤(针对多字节编码如UTF-8文本,按字符数统计长度):
awk 'length($0) < 1073741824' 原文件名 > 输出文件名
如果你需要的1GB是十进制的10亿字节,直接把上面的
1073741824替换成1000000000即可。
方法2:Perl(跨平台兼容性好,适合Mac/BSD环境)
Perl的length函数默认按字节计算,无需额外参数,适配绝大多数Unix-like系统:perl -ne 'print if length($_) < 1073741824' 原文件名 > 输出文件名
注意事项
- 不要直接修改原文件,先输出到新文件校验内容无误后,再替换原文件避免数据丢失
- 如果是带转义换行的结构化文本(比如包含换行的CSV/JSON行),需要用对应格式的专用工具处理,上述通用命令不适用
- 处理TB级超大文件时,尽量使用固态硬盘读写,能大幅提升处理速度
内容的提问来源于stack exchange,提问作者imriss
相关产品推荐
相关产品推荐

