使用AWK或SED在两个TAGS之间打印数据

时间:2016-10-07 05:30:36

标签: bash awk sed

我的文本文件包含followig模式

<SUBBEGIN
NAME : A ;
AGE : 10 ;
ADDRESS 1 : NO10;
ADDRESS 2 : X-Lane;
ADDRESS 3 : X-City ;
CITY : X-City;
<SUBEND
<SUBBEGIN
NAME : B ;
AGE : 30 ;
ADDRESS 1 : NO70;
ADDRESS 2 : Y-Lane;
ADDRESS 3 : Y-City ;
<SUBEND

我想打印上面的输出格式如下,请帮助我排序,我是bash / shell的新手

预期产出:

NAME : A ;AGE : 10 ;ADDRESS 1 : NO10;ADDRESS 2 : X-Lane;ADDRESS 3 : X-City ;CITY : X-City;
NAME : B ;AGE : 30 ;ADDRESS 1 : NO70;ADDRESS 2 : Y-Lane;ADDRESS 3 : Y-City ;

我尝试了2个代码,但两个代码都打印在没有TAG的数据之上

awk  'BEGIN { FS = "<SUB" } ; { gsub(" ","",$0); print }' users.txt

awk '/<SUBBEGIN/{flag=1;next}/<SUBEND/{flag=0}flag' users.txt

2 个答案:

答案 0 :(得分:1)

"<SUBBEGIN|<SUBEND"已更改为awk -v RS="<SUBBEGIN|<SUBEND" '{$1=$1;} /./{print $0}' inputfile NAME : A ; AGE : 10 ; ADDRESS 1 : NO10; ADDRESS 2 : X-Lane; ADDRESS 3 : X-City ; CITY : X-City; NAME : B ; AGE : 30 ; ADDRESS 1 : NO70; ADDRESS 2 : Y-Lane; ADDRESS 3 : Y-City ; 。因此,这些标签之间的任何内容都将被视为一条记录。

$(System.DefaultWorkingDirectory)

答案 1 :(得分:1)

awk '/<SUBEND/{print t;t="";next}!/<SUBBEGIN/{t=t?t" "$0:$0}' file