Manipulando linhas com campos não ordenados

1

Eu tenho este conjunto de dados, mas quero transformá-lo em desafio de arquivo de dados Csv organizado é as seqüências de caracteres dizer OBI nem sempre está no mesmo campo na próxima linha !!!

NAM: 0,CDC: 0,SUBSPDPCPVERS: 4,CAMP: 0,serv: CSPS,CSLOC: 2,PSLOC: 2,GSMUEFEAT: 0,UNKNLOCDATECS:: EAoL,UNKNLOCDATEPS:: EAoL,OBI: 1
NAM: 0,CDC: 4,SUBSPDPCPVERS: 4,CAMP: 0,serv: CSPS,CSLOC: 2,PSLOC: 2,GSMUEFEAT: 0,UNKNLOCDATECS:: EAoL,UNKNLOCDATEPS:: EAoL,OSB1: 1
NAM: 0,CDC: 1,CAMP: 0,serv: CSPS,CSLOC: 2,PSLOC: 2,GSMUEFEAT: 0,UNKNLOCDATECS:: EAoL,UNKNLOCDATEPS:: EAoL,OBI: 1,OSB1: 1
NAM: 0,CDC: 0,CAMP: 0,serv: CSPS,CSLOC: 2,PSLOC: 2,GSMUEFEAT: 0,UNKNLOCDATECS:: EAoL,UNKNLOCDATEPS:: EAoL,OBI: 1,OSB1: 1
NAM: 0,CDC: 422,SUBSPDPCPVERS: 4,CAMP: 0,serv: CSPS,CSLOC: 2,PSLOC: 2,GSMUEFEAT: 0,UNKNLOCDATECS:: EAoL,UNKNLOCDATEPS:: EAoL,OSB1: 1

Espero colocar isso em prática: tenho tentado um rs que procura na linha por esse campo e retorna campo por campo, então eu participo dos arquivos que ele não é efetivo

NAM,CDC,SUBSPDPCPVERS,CAMP,serv,CSLOC,PSLOC,GSMUEFEAT,UNKNLOCDATECS,UNKNLOCDATEPS,OBI,OSB1
0,0,4,:0,CSPS,2,2,:0,:EAoL,:EAoL,1,
0,4,4,:0,CSPS,2,2,:0,:EAoL,:EAoL,,1
0,1,,:0,CSPS,2,2,:0,:EAoL,:EAoL,1,1
0,0,,:0,CSPS,2,2,:0,:EAoL,:EAoL,1,1
0,422,4,:0,CSPS,2,2,:0,:EAoL,:EAoL,,1
    
por user216017 14.02.2017 / 17:37

1 resposta

1
perl -nlE 'if($.==1){                            # if first line 
              @L = /(\w+):/g ;                   # L = list of keys
              say join(",",@L)}                  # print header 
           ($a,%b)=split(/\s*,?(\w+):/,$_,-1);   # b: dict of (keys, values)  
           say join(",", map { $b{$_} } @L)'  ex.txt
    
por 14.02.2017 / 20:03