仅替换特定列中的字符(CSV)

Mad*_*rin 0 linux csv awk sed

我有这样的数据:

1;2015-04-10;23:10:00;10.4.2015 23:10;8.9;1007.5;0.3;0.0;0;55
2;2015-04-10;23:20:00;10.4.2015 23:20;8.6;1007.8;0.4;0.0;0;56
3;2015-04-10;23:30:00;10.4.2015 23:30;8.5;1008.1;0.4;0.0;0;57
Run Code Online (Sandbox Code Playgroud)

它有点.作为小数分隔符,但我需要使用,.

所需数据:

1;2015-04-10;23:10:00;10.4.2015 23:10;8,9;1007,5;0,3;0,0;0;55
Run Code Online (Sandbox Code Playgroud)

我试过用Sed.随着sed -i 's/\./,/g' myfile.csv我可以代替用逗号分隔的所有点,但会破坏对第四列的日期.如何在其他地方将点​​更改为逗号,但保留第四列原样?如果某个其他Linux工具对于此任务更好,那么Sed我也可以使用它.

Ed *_*ton 5

sed用于简单替换,对于任何其他只使用awk:

$ awk 'BEGIN{FS=OFS=";"} {for (i=5;i<=NF;i++) sub(/\./,",",$i)} 1' file
1;2015-04-10;23:10:00;10.4.2015 23:10;8,9;1007,5;0,3;0,0;0;55
2;2015-04-10;23:20:00;10.4.2015 23:20;8,6;1007,8;0,4;0,0;0;56
3;2015-04-10;23:30:00;10.4.2015 23:30;8,5;1008,1;0,4;0,0;0;57
Run Code Online (Sandbox Code Playgroud)