我有一些长度为 100 到 300 MB 的文本文件,我想在 Emacs 中查看它们,但我的 Emacs 在打开和遍历如此大的文件时遇到了一些性能问题。因此,我正在寻找一个简单的实用程序,将文件拆分成可管理的块,例如每个 50 MB,并根据原始名称加上一些后缀来命名这些块以指示它们在序列中的位置。每个块将从前一个块被截断的地方开始,并且不超过 50 MB,最后一个块可能更短。
是否有任何简单的工具可以在 Linux 计算机上执行此类操作,例如 head 或 tail 之类的工具,可以为每个块提供多个结果?
例如,给定test.out
一个长度为 120 MB 的文件,将其分成test.out.1
前 50 MB、test.out.2
后 50 MB 以及test.out.3
文件末尾剩余的 20 MB。
head
我可以使用和的组合tail
来获取各个部分,但我想要一个可以抽象出这一切的工具,也许是某人已经创建的可以执行此类任务的 Perl 脚本或 Python 脚本?
答案1
已经有一个不错的工具可以实现这个目的:split
> 男人 1 分裂 姓名 split——将文件分割成几部分 概要 拆分 [-l 行数] [-a 后缀长度] [文件 [前缀]] split -b 字节数[K|k|M|m|G|g] [-a 后缀长度] [文件 [前缀]] split -p 模式 [-a 后缀长度] [文件 [前缀]]
split --bytes 50M test.out test.out_
会将文件拆分test.out
为 test.out_xaa、test.out_xab、test.out_xac、...
一个更丑陋的解决方案是使用dd
dd if=test.out of=test.out.part1 bs=1M count=50 skip=0
创建一个名为 test.out.part1 的文件,其中包含 test.out 的前 50M。您可以将 skip 的值增加到 1 以获取第二个块,将 skip 的值增加到 2 以获取第三个块,等等。只需确保也更改文件名,否则您将最终覆盖相同的输出文件。