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大师的帮助.:)
谢谢!
你可以尝试这样的事情:
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)