如何合并文件指定两行?大文件如何避免全量读取?
合并文件指定两行的方法(无需全量读取文件)
方法1:用sed(流式处理,适合大文件)
sed是逐行处理文本的工具,不需要把整个文件加载到内存,非常适合处理超大型文件。执行以下命令就能把第10行合并到第9行:
sed '9{N;s/\n/ /}' your_file > new_file
如果想直接修改原文件(谨慎操作),可以加-i参数:
# GNU sed(Linux环境) sed -i '9{N;s/\n/ /}' your_file # BSD sed(macOS环境) sed -i '' '9{N;s/\n/ /}' your_file
命令说明:
9{}:只对第9行执行后续操作N:把下一行(第10行)拉到当前处理的缓冲区中s/\n/ /:把缓冲区里的换行符替换成空格,完成两行合并
方法2:用awk(同样流式处理)
awk也是逐行处理的工具,实现合并的命令如下:
awk 'NR==9{hold=$0; getline; print hold " " $0; next}1' your_file > new_file
命令说明:
NR==9:匹配到第9行时执行后续逻辑hold=$0:把第9行内容暂存起来getline:主动读取下一行(第10行)print hold " " $0:输出合并后的内容next:跳过默认的行输出逻辑1:其他所有行直接原样输出
关于你之前尝试的echo $(cat filename)
这个操作会把整个文件的内容全部读取到内存,还会把所有换行符替换成空格,相当于把整个文件揉成一行,完全达不到只合并指定两行的目的,而且处理大文件时会占用大量内存,绝对不推荐。
内容的提问来源于stack exchange,提问作者Urza_tron
相关产品推荐
相关产品推荐

