首页 > 解决方案 > 将文件拆分为大小大致相等的部分,但考虑到 2 行块

问题描述

我有一个包含数十万行的文件,如下所示:

>something
somethingelse
>something2
somethingelse2
>something3
somethingelse3
>something4
somethingelse4
>something5
somethingelse5
>something6
somethingelse6
>something7
somethingelse7
>something8
somethingelse8
>something9
somethingelse9
>something10
somethingelse10

等等

每 2 行配对,例如,这将被视为文件中的 1 个条目:

>something
somethingelse

我希望能够将其拆分为n大小大致相等的文件。但是,在拆分时,每个文件应将条目保持在一起:n拆分部分应包含大致偶数个条目,而不是仅在行上拆分。例如,如果我要尝试将其拆分为大约 4 个文件,我想要类似的内容:

文件第 1 部分

>something
somethingelse
>something2
somethingelse2
>something3
somethingelse3

文件第 2 部分

>something4
somethingelse4
>something5
somethingelse5
>something6
somethingelse6

文件第 3 部分

>something7
somethingelse7
>something8
somethingelse8

文件第 4 部分

>something9
somethingelse9
>something10
somethingelse10

只要文件包含大致相同数量的条目,并且这些条目保持在一起,那么剩下的 2 最终位于哪个文件部分并不重要,所以不是

文件1:

>something
somethingelse
>something2

文件2:

somethingelse2
>something3
somethingelse3

我考虑过使用该split -l命令,但据我所知,它仅限于:将此文件拆分为数十万个文件,每个文件仅包含 2 行,或将文件拆分为行数大致相等的部分,但条目可以拆分(第一行在一个部分结束,第二行在另一部分结束)。

有什么简单的方法可以让我忽略使用 bash 命令执行此操作吗?

标签: bash

解决方案


如果我很好地理解您想要实现的目标,您只需要使用split -l任意偶数行。

如果N是总行数并且P是您要创建的零件数,我可能会使用类似的东西:

split -l $((N/P + (N/P) % 2))

where+ (N/P) % 2确保你得到一个偶数


推荐阅读