フォームのファイルがあります
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
ただし、ファイルにゼロがある場合は、次のようにゼロ以外の列番号のみが表示されます。
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/,$//'