我需要将模式标记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
答案 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