我有这样的数据:
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
它有点 .
作为小数点分隔符,但我需要使用 ,
代替。
所需数据:
1;2015-04-10;23:10:00;10.4.2015 23:10;8,9;1007,5;0,3;0,0;0;55
我尝试使用 Sed
。使用 sed -i 's/\./,/g' myfile.csv
我可以用逗号替换所有点,但会破坏第四列中的日期。如何将其他地方的点更改为逗号,但保持第四列不变?如果其他一些 Linux
工具比 Sed
更适合这项任务,我也可以使用它。
最佳答案
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
关于linux - 仅替换特定列中的字符 (CSV),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30578219/