使用awk将文本文件分成多个文件

时间:2016-03-25 00:48:13

标签: shell awk

我已经阅读了其他几个有关此问题的问题,但似乎没有一个问题在起作用。我目前正在尝试使用分隔符“STOPHERE”分割文件A.txt之类的内容。

这是代码:

#!/bin/bash

awk 'BEGIN{
    RS = "STOPHERE"
    file = 0}
{
    file++
    print $0 > ("sepf" file)
}' A.txt

档案A:

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa      lwdjnuqqfqaaaaaaaaaa   qlknfqek fkgnl       efekfnwegelflfne
ldnwefne f STOPHEREsdfnkjnf nnnnnnnnnnnnnnnnnnnnnnnasd  fefffffffffffffflllo  

aldn3orn    STOPHERE

fknjke bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbowqff STOPHERE i
asfjfenf STOPHERE

进入这些:

sepf1:

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa      lwdjnuqqfqaaaaaaaaaa   qlknfqek fkgnl       efekfnwegelflfne
ldnwefne f 

sepf2:

sdfnkjnf nnnnnnnnnnnnnnnnnnnnnnnasd  fefffffffffffffflllo  

aldn3orn  

sepf3:

    #line starts here
fknjke bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbowqff 

sepf4:

 i
asfjfenf 

基本上,格式化必须在STOPHERE之间保持完全相同。

但由于某种原因,这是我在某些文件中得到的那种输出:

例如:sepf2

TOPHEREsdfnkjnf nnnnnnnnnnnnnnnnnnnnnnnasd  fefffffffffffffflllo  

aldn3orn

关于为什么“TOPHERE”仍然存在的任何想法?

1 个答案:

答案 0 :(得分:0)

GNU awk允许RS成为正则表达式。因此,您可以提供多个字符作为记录分隔符。您的代码也可以简化,因为AWK提供的默认值为0。 因此,这将为每条记录生成单独的文件。

awk -v RS="STOPHERE" '{print $0 > ("sepf" ++file)}'