我正在处理以瑞典格式编写的数据集。瑞典使用逗号代替十进制数字。
我的数据集是这样的:
1,188,1,250,0,757,0,946,8,960
1,257,1,300,0,802,1,002,9,485
1,328,1,350,0,846,1,058,10,021
1,381,1,400,0,880,1,100,10,418
我希望将每个其他逗号更改为指向并输出如下:
1.188,1.250,0.757,0.946,8.960
1.257,1.300,0.802,1.002,9.485
1.328,1.350,0.846,1.058,10.021
1.381,1.400,0.880,1.100,10.418
有关如何使用简单的shell脚本执行此操作的任何想法。这很好如果我分多步完成。我的意思是,如果我首先更改逗号的第一个实例,然后更改第三个实例...
非常感谢你的帮助。
答案 0 :(得分:6)
使用sed
sed 's/,\([^,]*\(,\|$\)\)/.\1/g' file
1.188,1.250,0.757,0.946,8.960
1.257,1.300,0.802,1.002,9.485
1.328,1.350,0.846,1.058,10.021
1.381,1.400,0.880,1.100,10.418
答案 1 :(得分:1)
供参考,以下是使用awk
实现转化的可能方法:
awk -F, '{for(i=1;i<=NF;i=i+2) {printf $i "." $(i+1); if(i<NF-2) printf FS }; printf "\n" }' file
for
循环迭代由逗号分隔的每2个字段(由选项-F,
设置)并打印当前元素,下一个以点分隔。
除了在行尾之外,将打印由FS
表示的逗号分隔符。
答案 2 :(得分:0)
作为Perl单线程,使用分割和数组操作:
perl -F, -e '@a = @b = (); while (@b = splice @F, 0, 2) {
push @a, join ".", @b} print join ",", @a' file
输出:
1.188,1.250,0.757,0.946,8.960
1.257,1.300,0.802,1.002,9.485
1.328,1.350,0.846,1.058,10.021
1.381,1.400,0.880,1.100,10.418
答案 3 :(得分:0)
许多sed
方言允许您通过指定s///
的数字选项来指定要替换的模式的哪个实例。
sed -e 's/,/./9' -e 's/,/./7' -e 's/,/./5' -e 's/,/./3' -e 's/,/./'
ISTR一些sed
方言可以让你将其简化为
sed 's/,/./1,2'
但我的Debian不支持。