bash - 合并文本文件列表(太长),在其间添加换行符
问题描述
我有一个包含 ~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
当多个作为参数提供时,确保更改应用于每个文件。
推荐阅读
- javascript - 在 DataTables JS 中搜索数字和文本
- javascript - 如何使 HTMLCollection 显示为字符串
- excel - 基于单元格值动态隐藏列
- java - java - HttpServlet 文件下载
- node.js - Nodejs 繁琐的 Mssql 性能缓慢
- firebase - 云函数“调用”API 限制
- swift - Swift Override Default Init 没有子类
- asp.net - 如何使 ASP.NET 页面适合任何屏幕尺寸?
- c - 不正确的内存访问:为什么我的内核*不*崩溃
- wordpress - 为什么超级表单插件中的国家元素为空?