代码之家  ›  专栏  ›  技术社区  ›  Sergey Kovalev

使用bash脚本将文本文件一分为二

  •  7
  • Sergey Kovalev  · 技术社区  · 14 年前

    我有一个文本文件,中间有一个标记:

    one
    two
    three
    blah-blah *MARKER* blah-blah
    four
    five
    six
    ...
    

    标记 ,第二个包含后面的所有内容 标记 . 它似乎可以在一行与awk或sed一起完成,我只是不知道如何。

    csplit ,但csplit不能很好地处理Unicode文本。

    4 回复  |  直到 6 年前
        1
  •  10
  •   ghostdog74    14 年前

    你可以用awk轻松地完成它

    awk -vRS="MARKER" '{print $0>NR".txt"}' file
    
        2
  •  5
  •   Leniel Maccaferri    14 年前

    试试这个:

    awk '/MARKER/{n++}{print >"out" n ".txt" }' final.txt
    

    它将从final.txt读取输入,并生成out1.txt、out2.txt等。。。

        3
  •  3
  •   Dennis Williamson    14 年前
    sed -n '/MARKER/q;p' inputfile > outputfile1
    sed -n '/MARKER/{:a;n;p;ba}' inputfile > outputfile2
    

    或一应俱全:

    sed -n -e '/MARKER/! w outputfile1' -e'/MARKER/{:a;n;w outputfile2' -e 'ba}' inputfile
    
        4
  •  1
  •   Marcelo Cantos    14 年前

    split 命令几乎可以执行您想要的操作:

    $ split -p '\*MARKER\*' splitee 
    $ cat xaa
    one
    two
    three
    $ cat xab
    blah-blah *MARKER* blah-blah
    four
    five
    six
    $ tail -n+2 xab
    four
    five
    six
    

    也许它足够满足你的需要了。