将文本文件分成几个部分

spliting a txt file with text in several parts

我有一个 .txt 文件:

level5:tafekf
level5:tafekg
level5:tafekh
level5:tafeki
level5:tafekj
level5:tafekk
level5:tafekl
level5:tafekm
level5:tafekn
level5:tafeko
level5:tafekp
level5:tafekq
level5:tafekr
level5:tafeks
level5:tafekt
level5:tafeku
level5:tafekv
level5:tafekw
level5:tafekx
level5:tafeky
level5:tafekz
level5:tafela
level5:tafelb
level5:tafelc
level5:tafeld
level5:tafele
level5:tafelf
level5:tafeku
level5:tafekv
level5:tafekw
level5:tafekv
level5:tafekw

我想在 linux 终端中使用一个命令来拆分,例如 10 次。 所以我希望有 10 个 .txt 文件作为

的输出

1.txt

    level5:tafekf
    level5:tafekg
    level5:tafekh

2.txt

    level5:tafeki
    level5:tafekj
    level5:tafekk

3.txt

    level5:tafekl
    level5:tafekm
    level5:tafekn

4.txt

    level5:tafeko
    level5:tafekp
    level5:tafekq

5.txt

    level5:tafekr
    level5:tafeks
    level5:tafekt

6.txt

    level5:tafeku
    level5:tafekv
    level5:tafekw

7.txt

    level5:tafekx
    level5:tafeky
    level5:tafekz

8.txt

    level5:tafela
    level5:tafelb
    level5:tafelc

9.txt

    level5:tafeld
    level5:tafele
    level5:tafelf

10.txt

    level5:tafeku
    level5:tafekv
    level5:tafekw
    level5:tafeih
    level5:tafeii

谢谢。

您可以使用 GNU coreutils 中的 split 命令:

split -n l/10 --numeric-suffixes=1 --additional-suffix=.txt input.file

希望输出名称对您来说足够好。它们从 x01.txt 开始,然后是 x02.txt 等等。有关更多信息,请调用 info split.


上述命令在 GNU 系统上有效,如 Linux。其他系统也可能附带一个 split 版本,但它与 GNU 版本不兼容。对于便携式版本,我会像这样使用 awk:

split.awk

{
    a[NR]=[=11=]
    c++ 
}

END {
    lines_per_split = int(c/num_splits)
    f=1 
    for(i=1;i<=c;i++) {
        print a[i] >> f".txt"
        if(i%lines_per_split==0 && c-i >= lines_per_split) {
            close(f".txt")
            f++
        }
    }   
}

这样称呼它:

awk -vnum_splits=10 -f split.awk input.txt