我有这个数据集,但想将其转换为有组织的 Csv 数据文件,挑战是字符串说 OBI 并不总是在下一行的同一字段上!
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
我希望得到这个输出:一直在尝试使用 rs 在该字段的行中查找并逐个字段返回,然后我加入文件,但它无效
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
答案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