【发布时间】:2026-01-12 07:25:01
【问题描述】:
所以我有兴趣将相当大的文件拆分为 5Gig 间隔。我的目标是让所有分区都小于 5Gigs 和尽可能少的分区。
虽然我通常会使用带有大小限制的拆分,但我需要确保行保持完整(我无法按大小拆分)。
我一直在考虑使用文件大小和行数来确定每个文件可以拆分的行数
例如
File size = 11Gig
File line count = 900
File limit = 5Gig
ceiling(11/5) = 3
900/3 = 300
#Split the file by line limiting 300 each.
虽然这可能通常可行,但由于线元素的性质,如果文件的一部分中有一个非常大的线,文件大小仍可能高于 5gigs。
我正在考虑使用 python(它可以更好地处理数字并且看起来不那么 hackish),但是我会降低 bashes 文件操作的速度。
我想知道是否有人知道 bash 中有更好的替代方案?
提前谢谢你!
【问题讨论】:
-
900 行不算什么,你可以循环过去。我会遍历每一行,为写入当前文件的字节保留一个计数器。如果当前行超过 5G,则启动一个新文件。如果线路本身超过5G,则抛出错误。 (如果你必须节省内存,这会变得有点复杂,但仍然可能。)
-
Linux 拆分有一个 --lines=NUMBER 选项,可以按每个输出文件的行数拆分。
-
上面的数字并不是我实际要做的准确比例,它们只是为了提供一个易于理解的例子。