将文本分成几个部分的txt文件

时间:2015-10-04 08:00:06

标签: bash parsing text text-parsing

我有一个.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

谢谢。

1 个答案:

答案 0 :(得分:2)

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

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

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

上述命令适用于GNU系统,如Linux。其他系统也可能附带分割版本,但它与GNU版本不兼容。对于便携版本,我会使用这样的awk:

split.awk

{
    a[NR]=$0
    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