【问题标题】:Split file into parts of roughly equal size but considering 2-line blocks将文件拆分为大小大致相等的部分,但考虑到 2 行块
【发布时间】:2021-05-11 15:37:29
【问题描述】:

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

>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

文件第二部分

>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


    【解决方案1】:

    如果我很了解您想要实现的目标,您只需将split -l 与任意偶数 行一起使用。

    如果N 是总行数,P 是您要创建的部分数,我可能会使用类似:

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

    + (N/P) % 2 确保您得到偶数

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-08
      • 1970-01-01
      • 2023-01-07
      • 2011-01-02
      • 2022-01-16
      • 2010-11-19
      相关资源
      最近更新 更多