我有一个包含约 300K 文本文件的目录,我想将它们连接成一个文件,并使用换行符 \n
分隔每个文件的内容。例如
file1 = 'i like apples'
file2 = 'john likes oranges'
output = 'i like apples\njohn likes oranges'
问题在于,由于文件数量较多,像
这样的命令awk '{print}' dir/* combined.txt
抛出有关参数列表太长的错误。有什么快速方法可以解决这个问题吗?我一直在尝试找到一种使用管道的方法,但到目前为止还没有成功。
文本文件不以 \n
结尾。
最佳答案
为了避免长命令行,您可以使用 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
确保在提供多个文件作为参数时将更改应用于每个文件。
关于bash - 合并文本文件列表(太长),在之间添加换行符分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51675127/