AWK拆分为多个分隔符行

Jos*_*ose 3 unix shell awk split

我正在尝试使用AWK单行拆分文件,但下面的代码我没有正常工作.

awk '
BEGIN { idx=0; file="original_file.split." }
/^REC_DELIMITER.(HIGH|TOP)$/ { idx++ }
/^REC_DELIMITER.TOP$/,/^REC_DELIMITER.(HIGH|TOP)$/ { print > file sprintf("%03d", idx) }
' original_file
Run Code Online (Sandbox Code Playgroud)

测试文件是"original_file":

REC_DELIMITER.TOP
lineA1
lineA2
lineA3
REC_DELIMITER.HIGH
lineB1
lineB2
lineB3
REC_DELIMITER.TOP
lineC1
lineC2
lineC3
REC_DELIMITER.HIGH
lineD1
lineD2
lineD3
Run Code Online (Sandbox Code Playgroud)

上面的AWK代码用于REC_DELIMITER.TOP,它给我这些文件:

original_file.split.001:
REC_DELIMITER.TOP

original_file.split.003:
REC_DELIMITER.TOP
Run Code Online (Sandbox Code Playgroud)

但是,我试图得到这个:

original_file.split.001:
REC_DELIMITER.TOP
lineA1
lineA2
lineA3

original_file.split.003:
REC_DELIMITER.TOP
lineC1
lineC2
lineC3
Run Code Online (Sandbox Code Playgroud)

将有其他记录分隔符,并在需要时,我们可以像REC_DELIMITER.HIGH一样运行它们,这样获取如下文件:

original_file.split.002:
REC_DELIMITER.HIGH
lineB1
lineB2
lineB3

original_file.split.004:
REC_DELIMITER.HIGH
lineD1
lineD2
lineD3
Run Code Online (Sandbox Code Playgroud)

任何帮助的人都非常感谢,我一直试图让这个工作过去几天,上面的AWK代码是我能够得到的最好的.我现在需要来自AWK大师的帮助.:)

谢谢!

jay*_*ngh 5

你可以尝试这样的事情:

awk '
/REC_DELIMITER\.TOP/ {
    a=1
    b=0
    file = sprintf (FILENAME".split.%03d",++n)
}    
/REC_DELIMITER\.HIGH/ {
    b=1
    a=0
    file = sprintf (FILENAME".split.%03d",++n)
}  
a {
    print $0 > file
}    
b {
    print $0 > file
}' file
Run Code Online (Sandbox Code Playgroud)