如何高效在文件最后一行末尾添加句号?现有实现求优化
更高效地给文件最后一行末尾添加句号的方法
你的现有实现确实能完成需求,但它需要创建多个临时文件,涉及多次文件IO操作,对于大文件来说效率会偏低。其实我们可以用单条命令直接完成这个任务,不需要额外的临时文件,更简洁高效。
方法一:使用sed(最简洁)
直接用sed定位到最后一行并在末尾添加句号:
sed '$s/$/./' input_file > output_file
- 解释:
$表示匹配文件的最后一行,s/$/./是将该行的行尾($)替换为句号(本质就是在末尾添加句号),最后将结果重定向到输出文件。
如果想要原地修改原文件(记得先备份),可以使用-i参数(不同系统的sed略有差异):
# GNU sed(Linux),直接原地修改,无备份 sed -i '$s/$/./' input_file # BSD sed(macOS等),会生成input_file.bak备份文件 sed -i.bak '$s/$/./' input_file
方法二:使用awk
awk也可以高效完成这个任务,只需要遍历一次文件:
awk '{if (NR>1) print prev; prev=$0} END{print prev "."}' input_file > output_file
- 解释:遍历文件时,先打印上一行的内容(避免重复打印最后一行),最后在
END块中给最后一行添加句号并打印。这种方法只需要一次文件读取,效率很高。
对比现有实现
你的原有命令:
sed '$d' file > tmp1 tail -1 file > tmp2 sed -i 's/$/./' tmp2 cat tmp1 tmp2 > output
需要创建两个临时文件,并且多次读取源文件(sed '$d'和tail -1各读一次),对于小文件差异不大,但处理大文件时,单命令的方案能减少IO开销,速度更快。
内容的提问来源于stack exchange,提问作者OXXO
相关产品推荐
相关产品推荐

