csv 형식으로 sed

csv 형식으로 sed

양식의 파일이 있습니다

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

형태로 되어 있어야 합니다

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

그러나 파일에 0이 있으면 다음과 같이 0이 아닌 열 번호만 표시됩니다.

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

0이 포함된 7개의 길이 라인을 생성하는 sed 명령을 작성하고 싶습니다.

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

어떤 아이디어가 있나요?

답변1

할 수는 있지만 sed;-) 를 사용하면 더 명확합니다 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)'

가능한 sed해결책(많이 테스트되지 않음):

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

관련 정보