如何用低内存单行代码将文件中短行追加至前一行
高效处理大文件:将短行追加到前一行的单行解决方案
你的问题核心是处理大文件时内存占用过高,原来的方法把整个文件转换成单行再切割,会把所有内容加载到内存里,这对大文件来说完全不可行。我们可以用awk写出一个逐行处理、内存占用极低的单行命令,完美解决这个问题。
解决方案代码
awk '{if(length($0)==8){if(prev!=""){print prev; prev=$0}else{prev=$0}}else{prev=prev $0}}END{print prev}' FILENAME
代码逻辑解释
这个命令全程逐行处理文件,只在内存中保存当前待合并的内容,不会加载整个文件:
- 当遇到长度为8的标准行时:
- 如果之前已经缓存了内容(可能是合并了短行的前一行),先输出缓存的内容,再把当前标准行设为新的缓存
- 如果是第一行且是标准行,直接把它设为缓存
- 当遇到长度小于8的短行时:直接把它追加到缓存的内容后面
- 最后在
END块中输出剩下的缓存内容(处理文件最后一行的情况)
示例验证
假设你的输入文件内容是:
ABCDEFGH ABCDEFGH ABC ABCDEFGH ABCDEFGH ABCD ABCDEFGH
执行命令后会得到输出:
ABCDEFGH ABCDEFGHABC ABCDEFGH ABCDEFGHABCD ABCDEFGH
完全符合你期望的合并效果,而且不管文件多大,内存占用都保持在极低水平。
内容的提问来源于stack exchange,提问作者grapefruit
相关产品推荐
相关产品推荐

