Linux 上如何快速高效的对几个大文件进行合并?

2016-03-23 21:51:11 +08:00
 wwttc

假如现在我有一个 100G 的大文件,内容为文本。现在想要将文件的本身进行复制,得到一个大约 1T 的文件。 我想到的一种方法是对这个 100G 的文件进行复制,然后将多个文件进行 merge 。

copy 100G.txt another100G.txt
cat another100G.txt >> 100G.txt

就是利用 copy 和 cat 命令。但是,这样做还是太慢。有没有什么高效的做法呢?

4637 次点击
所在节点    问与答
5 条回复
zxgngl
2016-03-23 22:29:25 +08:00
能更具体地讲一下你的应用场景吗?通过你的描述我还是不太清楚是什么导致你有这样的需求。
zxgngl
2016-03-23 22:33:51 +08:00
但是我可以提供一点思路:节省时间可以通过减少对硬盘的“读”或“写”操作,如果你每次写的都是一样的内容(这 100 G 的大文件),那么可以通过把它放到内存中,这样就不用每次都“读”了。然后你可以写一个程序多次把内存中的这 100 G 的数据写入到目标文件中。这只是一个简陋的思路,具体操作可能还有优化的余地。
SoloCompany
2016-03-24 02:46:40 +08:00
for i in `seq 4` ; do
cat 1.txt | tee -a 1.txt > /dev/null
done

循环执行 4 次,你的 1.txt 就自增 16 倍

嗯,建议循环 64 次作死一下试试
SoloCompany
2016-03-24 02:49:29 +08:00
不想重复 io 的话其实人体蜈蚣一下就可以了
cat 1.txt | tee -a 1.txt | … 此处省略一千字 ... | tee -a 1.txt | tee -a 1.txt > /dev/null
lhbc
2016-03-24 02:58:01 +08:00
其实大文件分割成几个小的不是更容易处理吗……

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/265877

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX