sed em formato csv

1

Eu tenho um arquivo no formato

VL-8299673,30.000,49.000,1.000,21.901,2630.000,428861.000
VL-8299673,1071.000,570.000,35.000,3963.608,632.000,366563.000
VL-8299673,36.000,867.000,24.000,6523.005,3544.000,176054.000
VL-8299673,5:281185.000
VL-8299673,44.000,372.000,67.000,7029.358,293.000,446448.000
VL-8299673,5:48479.000
VL-8299673,0:2.000,2:7.000,3:80.222,4:1153.000

é suposto ser da forma

VL-8299673,1190.000,609.000,28.000,12676.158,1819.000,452813.000

mas quando há zeros no arquivo, ele mostra apenas os números de coluna que são diferentes de zero, como

VL-8299673,0:2.000,2:7.000,3:80.222,4:1153.000

Eu gostaria de escrever um comando sed que faça uma linha de 7 comprimentos com zeros incluídos, como

VL-8299673,2.000,0,7.000,80.222,1153.000,0

Alguma idéia?

    
por craig 06.02.2013 / 21:59

1 resposta

2

Embora isso possa ser feito com sed , seria muito mais legível com perl ; -):

perl -lpe '$n=0;s{,(\d+:)?([^,]*)}{if($1ne""){$r=",0"x($1-$n).",$2";
           $n=$1}else{$r=$&};$n++;$r}ge;$_.=",0"x(6-$n)'

Uma possível solução sed (não muito testada):

sed 's/$/%543210@@@@@@@/;:1
  s/^\(\(@*\)[^,]*\),\([0-9]\):\(.*%.*.\{6\}\(.*\)\)//;t1
  s/^\([^:]*\),/@@/;t1
  s/@*\(.*\)%.*/@@@@@@@/;s/\(\(@[^@]*\)\{7\}\).*//
  :2
  s/@@/,0@/;t2
  y/@/,/;s/,$//'
    
por 06.02.2013 / 22:22

Tags