首页 > 解决方案 > 合并文本文件列表(太长),在其间添加换行符

问题描述

我有一个包含 ~300K 文本文件的目录,我想将它们连接成一个文件,使用换行符分隔每个文件的内容\n。例如

file1 = 'i like apples'
file2 = 'john likes oranges'
output = 'i like apples\njohn likes oranges'

问题是由于文件数量众多,命令如

awk '{print}' dir/* combined.txt

抛出关于参数列表太长的错误。有什么快速解决这个问题的方法吗?我一直在尝试找到一种使用管道的方法,但到目前为止还没有成功。

文本文件不以\n.

标签: bashunixtext-filesnewlinecat

解决方案


为了避免冗长的命令行,您可以使用 shell 构造,例如 for 循环:

for f in dir/*; do cat "$f"; printf '\n'; done > combined.txt

如果组合文件中的文件顺序无关紧要,您可以find改用:

find dir -type f -exec sed -s '$s/$/\n/' {} + > combined.txt

这用于find -exec最小化调用命令的次数-exec,同时避免命令行太长。

sed -s '$s/$/\n'用换行符替换文件中最后一行的结尾;-s当多个作为参数提供时,确保更改应用于每个文件。


推荐阅读