awk:在错误的位置处理换行符分隔

dai*_*ain 4 sed awk text-processing newlines

我有一些数据看起来像这样:

abc


123
456
789
def


111
222
333
ghi


999
888
777
666
Run Code Online (Sandbox Code Playgroud)

即记录由多个换行符分隔,但位置错误。我想要的是这样得到它:

abc
123
456
789

def
111
222
333

ghi
999
888
777
666
Run Code Online (Sandbox Code Playgroud)

我尝试在 awk 中设置RS\n\n\n,但最终导致记录被错误地切割;该abc术语最终作为前一个记录的最后一个字段,而不是当前记录的第一个字段。

我也不知道如何使用sed它,因为它是逐行工作的。

Rud*_*diC 5

尝试

awk '!NF {next} /[^0-9]/ {printf XRS; XRS = ORS} 1' file2
abc
123
456
789

def
111
222
333

ghi
999
888
777
Run Code Online (Sandbox Code Playgroud)

它删除空行(我从你的规范中读到这些确实是空的,没有空格等),然后检查是否有任何非数字,指示记录标题,为其打印换行符,除了第一个得到空字符串。


Ed *_*ton 5

在每个 Unix 机器上的任何 shell 中使用任何 awk:

$ awk '/[^0-9]/ && NR>1{print ""} NF' file
abc
123
456
789

def
111
222
333

ghi
999
888
777
666
Run Code Online (Sandbox Code Playgroud)