求助:MacOS终端将多文本文件合并为单表格(每文件一列)及报错解决
Mac终端合并大量TXT文件为表格(原生工具方案)
问题原因
你遇到的paste: Too many open files错误,是因为Mac默认限制每个进程最多打开256个文件描述符,当*.txt匹配的文件数量超过这个阈值时,paste无法同时打开所有文件,导致命令失败并生成空文件。
下面提供两种原生终端解决方案,均满足你的需求:每个文件对应一列、每行内容对应表格行、文件名按首字母排序。
方案一:临时提高文件描述符限制(适合文件数量非极端多的场景)
- 查看当前文件描述符限制:
ulimit -n - 临时调高限制(数值需大于你的TXT文件总数,示例设为2048):
ulimit -n 2048注意:该调整仅在当前终端会话有效,关闭终端后会恢复默认值。
- 按首字母排序文件并执行合并:
paste -d ' ' $(ls -1 *.txt | sort) > merged.csvls -1 *.txt | sort:按文件名首字母排序并输出每个文件名-d ' ':用制表符作为列分隔符(Numbers/Excel可直接识别;若需逗号分隔,可替换为-d ',',但需确保文本内容不含逗号)
方案二:逐步合并文件(适合文件数量极多、调高限制仍无效的场景)
此方法每次仅合并两个文件,彻底避开打开文件数量限制:
- 生成按首字母排序的文件列表:
ls -1 *.txt | sort > file_list.txt - 初始化合并文件(取第一个文件的全部内容):
cp $(head -1 file_list.txt) merged_temp.csv - 循环合并剩余文件:
tail -n +2 file_list.txt | while read filename; do paste -d ' ' merged_temp.csv "$filename" > merged_temp_new.csv mv merged_temp_new.csv merged_temp.csv done - 生成最终文件并清理临时文件:
mv merged_temp.csv merged.csv rm file_list.txt
验证结果
合并后的merged.csv可直接用Numbers打开,每一列对应一个TXT文件,行内容与原文件一一对应,列顺序按文件名首字母排序。
内容的提问来源于stack exchange,提问作者big_smile
相关产品推荐
相关产品推荐

