我正在尝试使用 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
测试文件是“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
上面的 AWK 代码用于 REC_DELIMITER.TOP,它给了我这些文件:
original_file.split.001:
REC_DELIMITER.TOP
original_file.split.003:
REC_DELIMITER.TOP
但是,我正在努力做到这一点:
original_file.split.001:
REC_DELIMITER.TOP
lineA1
lineA2
lineA3
original_file.split.003:
REC_DELIMITER.TOP
lineC1
lineC2
lineC3
还会有其他的记录分隔符,需要的时候,我们可以像REC_DELIMITER.HIGH一样为它们运行,这样得到的文件如下:
original_file.split.002:
REC_DELIMITER.HIGH
lineB1
lineB2
lineB3
original_file.split.004:
REC_DELIMITER.HIGH
lineD1
lineD2
lineD3
任何帮助都非常感谢,过去几天我一直在努力让这个工作,上面的 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
关于shell - AWK 拆分多个分隔线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17052428/