使用Pattern标记之间的sed / awk将多行值拆分为列

时间:2014-09-09 19:13:02

标签: awk sed split multiline

我需要将模式标记1和2之间的行拆分成列。 我注意到Sed表示没有拆分列。有人可以帮忙吗?。

StartPattern1
AAA\n
BBB\n
CCC\n
EndPattern
Some text
StartPattern2
XXX\n
YYY\n
ZZZ\n
MMM\n
NNN\n
EndPattern2

sed / awk需要的结果:

StartPattern1
AAA\tBBB\tCCC
End Pattern1
StartPattern2
XXX\tYYY\tZZZ\tMMM\tNNN\n
EndPattern2

1 个答案:

答案 0 :(得分:2)

这应该有效:

cat file
StartPattern1
AAA
BBB
CCC
EndPattern
Some text
StartPattern2
XXX
YYY
ZZZ
MMM
NNN
EndPattern2

awk '/StartPattern/ {f=1;print;next} f && ! /EndPattern/ {printf "%s%s",$0,(f?"\t":RS)} /EndPattern/ {f=0;print "\n"$0;next}' file
StartPattern1
AAA     BBB     CCC
EndPattern
StartPattern2
XXX     YYY     ZZZ     MMM     NNN
EndPattern2

这是另一个:

awk '/^Start/{f=g=1} /^End/{f=0;print "\n"$0} f {printf "%s%s",$0,(g--==1?RS:"\t")}' file
StartPattern1
AAA     BBB     CCC
EndPattern
StartPattern2
XXX     YYY     ZZZ     MMM     NNN
EndPattern2