從垂直到水平過濾數據,在linux中使用字段作為唯一密鑰

我有數據,每個數據都以<SUBBEGIN開始,以<SUBEND結束,示例內容如下:

<SUBBEGIN
SUBSCRIBERIDENTIFIER=803838478;
PAIDTYPE=0;
SUBSCRIPTION=TOOMUCH&73337E0380B4B30F&1&AAA&BBB&CCC&1&1&FFFFFFFFFFFFFFFF&255&1&255&256&FFFFFFFFFFFFFFFF&0&0&128&1&255&255&FFFFFFFFFFFFFF&FFFFFFFFFFFFFF&0&0&0&1&0&0&1;
SUBSCRIPTION=TASKS&E7CC601262AB3535&1&DDD&EEE&FFF&2&1&FFFFFFFFFFFFFFFF&255&0&255&256&FFFFFFFFFFFFFFFF&0&0&128&1&255&255&FFFFFFFFFFFFFF&FFFFFFFFFFFFFF&0&21&0&1&0&0&1;
<SUBEND
<SUBBEGIN
SUBSCRIBERIDENTIFIER=705959905;
PAIDTYPE=254;
SUBSCRIPTION=REALLY&73337E0380B4B30F&1&GGG&HHH&LLL&1&1&FFFFFFFFFFFFFFFF&255&1&255&256&FFFFFFFFFFFFFFFF&0&0&128&1&255&255&FFFFFFFFFFFFFF&FFFFFFFFFFFFFF&0&0&0&1&0&0&1;
SUBSCRIPTION=TIRED&E7CC601262AB3535&1&MMM&NNN&PPP&2&1&FFFFFFFFFFFFFFFF&255&0&255&256&FFFFFFFFFFFFFFFF&0&0&128&1&255&255&FFFFFFFFFFFFFF&FFFFFFFFFFFFFF&0&21&0&1&0&0&1;
<SUBEND    

我計劃制作水平版本,只使用一些字段,結果的標題計劃如下:

SUBSCRIBERIDENTIFIER,,,PAIDTYPE,,1,255,SERVICENAME,SUBSCRIBEDATETIME,VALIDFROMDATETIME,EXPIREDDATETIME,,,,,

根據這些數據:

SUBSCRIBERIDENTIFIER sample is 803838478 (we can see it in SUBSCRIBERIDENTIFIER)
PAIDTYPE sample is 0 (we can see it in PAIDTYPE)
SERVICENAME sample is TOOMUCH (we can see it in SUBSCRIPTION)
SUBSCRIBEDATETIME sample is AAA (we can see it in SUBSCRIPTION)
VALIDFROMDATETIME sample is BBB (we can see it in SUBSCRIPTION)
EXPIREDDATETIME sample is CCC (we can see it in SUBSCRIPTION)

因此,預期結果如下:

803838478,,,0,,1,255,TOOMUCH,AAA,BBB,CCC,,,,,
803838478,,,0,,1,255,TASKS,DDD,EEE,FFF,,,,,
705959905,,,254,,1,255,REALLY,GGG,HHH,LLL,,,,,
705959905,,,254,,1,255,TIRED,MMM,NNN,PPP,,,,,

我試過這個腳本:

awk -F"&" '/^<SUBBEGIN$/{a=1} a && /^[[:blank:]]+(SUBSCRIBERIDENTIFIER|PAIDTYPE|SUBSCRIPTION)/{l=l OFS $1} a && /^<SUBEND$/ {print l; a=l=""}' sample.txt

但結果并不像預期的那樣:

SUBSCRIBERIDENTIFIER=803838478;         PAIDTYPE=0;         SUBSCRIPTION=TOOMUCH         SUBSCRIPTION=TASKS
SUBSCRIBERIDENTIFIER=705959905;         PAIDTYPE=254;         SUBSCRIPTION=REALLY         SUBSCRIPTION=TIRED

需要你的建議,謝謝。

? 最佳回答:
awk -F'[=;&]' -v OFS=',' '
    /<SUBBEGIN/,/<SUBEND/{
        if($1 == "SUBSCRIPTION"){
            i++
            a["SUBSCRIPTIONS"]=i
            a["SERVICENAME"i]=$2
            a["SUBSCRIBEDATETIME"i]=$5
            a["VALIDFROMDATETIME"i]=$6
            a["EXPIREDDATETIME"i]=$7
        }else{
            a[$1]=$2
        }
    }
    /<SUBEND/{
        for(i=1; i<=a["SUBSCRIPTIONS"]; i++){
            print ( \
                    a["SUBSCRIBERIDENTIFIER"], 
                    "","",
                    a["PAIDTYPE"],
                    "",1,255,
                    a["SERVICENAME"i],
                    a["SUBSCRIBEDATETIME"i],
                    a["VALIDFROMDATETIME"i],
                    a["EXPIREDDATETIME"i],
                    "","","","","" \
                )
        }
        i=0
     }
' file

803838478,,,0,,1,255,TOOMUCH,AAA,BBB,CCC,,,,,
803838478,,,0,,1,255,TASKS,DDD,EEE,FFF,,,,,
705959905,,,254,,1,255,REALLY,GGG,HHH,LLL,,,,,
705959905,,,254,,1,255,TIRED,MMM,NNN,PPP,,,,,
主站蜘蛛池模板: 国产成人精品无码一区二区三区 | 亚洲色偷偷偷网站色偷一区| 日本精品视频一区二区三区| 色偷偷一区二区无码视频| 久久久不卡国产精品一区二区| 国产观看精品一区二区三区| 无码一区二区三区免费| 国产精品视频分类一区| 日韩高清一区二区| 亚洲av一综合av一区| 精品国产高清自在线一区二区三区| 一区二区高清在线观看| 糖心vlog精品一区二区三区| 亚洲国产成人精品无码一区二区| 国产在线一区二区三区av| 99精品国产一区二区三区不卡 | 成人精品一区久久久久| 国产乱码精品一区三上| 综合无码一区二区三区四区五区| jizz免费一区二区三区| 日韩在线一区视频| 亚洲欧美一区二区三区日产| 亚洲国产精品综合一区在线| 日韩亚洲一区二区三区| 国产自产在线视频一区| 91一区二区三区| 中文字幕一区在线观看| 国产精品亚洲产品一区二区三区| 国产综合无码一区二区色蜜蜜| 中文字幕无码一区二区免费| 一区二区三区在线|日本| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 久久久精品人妻一区二区三区 | 人妻内射一区二区在线视频| 精品视频一区在线观看| 香蕉视频一区二区| 亚洲无删减国产精品一区| 国产精品无圣光一区二区| 色婷婷AV一区二区三区浪潮| 精品久久一区二区三区| 国产精品一区二区av|