V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
wwttc
V2EX  ›  问与答

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

  •  
  •   wwttc · 2016-03-23 21:51:11 +08:00 · 4461 次点击
    这是一个创建于 2948 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    5 条回复    2016-03-24 02:58:01 +08:00
    zxgngl
        1
    zxgngl  
       2016-03-23 22:29:25 +08:00
    能更具体地讲一下你的应用场景吗?通过你的描述我还是不太清楚是什么导致你有这样的需求。
    zxgngl
        2
    zxgngl  
       2016-03-23 22:33:51 +08:00
    但是我可以提供一点思路:节省时间可以通过减少对硬盘的“读”或“写”操作,如果你每次写的都是一样的内容(这 100 G 的大文件),那么可以通过把它放到内存中,这样就不用每次都“读”了。然后你可以写一个程序多次把内存中的这 100 G 的数据写入到目标文件中。这只是一个简陋的思路,具体操作可能还有优化的余地。
    SoloCompany
        3
    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
        4
    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
        5
    lhbc  
       2016-03-24 02:58:01 +08:00 via Android
    其实大文件分割成几个小的不是更容易处理吗……
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5375 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 06:42 · PVG 14:42 · LAX 23:42 · JFK 02:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.