如何使用XXXXXX.XXX
或XXXXXX,XXX
将数字格式(不同的小数点分隔符)从sed
更改为awk
?
答案 0 :(得分:8)
你想要多严谨?您可以像其他人建议的那样更改所有.
个字符,但如果您拥有的不仅仅是数字,那么这将允许大量的误报。更严格的是要求点的两边都有数字:
$ echo 123.324 2314.234 adfdasf.324 1234123.daf 255.255.255.0 adsf.asdf a1.1a |
> sed 's/\([[:digit:]]\)\.\([[:digit:]]\)/\1,\2/g'
123,324 2314,234 adfdasf.324 1234123.daf 255,255,255,0 adsf.asdf a1,1a
这确实允许更改几个奇怪的情况,即255.255.255.0
和a1.1a
,但干净地处理“正常”数字。
答案 1 :(得分:7)
这不会更准确,因为OP谈论数字......以确保它是点之前的前导数字。该文件可能包含OP不想替代的其他点。
sed '/[0-9]\./s/\./,/g'
答案 2 :(得分:2)
你可以这样做:
echo "XXX.XX" | sed s/\./,/g
答案 3 :(得分:2)
在大多数情况下,tr
可能是替换字符的最简单方法:
$ echo "0.3"|tr '.' ','
0,3
当然,如果您处理输入混合数字和字符串,您将需要一种更强大的方法,如Michael J. Barber提出的方法或更多方法。
默认情况下gawk
(GNU awk
,即大多数GNU / Linux发行版的awk
)使用点作为小数分隔符:
$ echo $LC_NUMERIC
fr_FR.UTF-8
$ echo "0.1 0.2"|awk '{print $1+$2}'
0.3
$ echo "0,1 0,2"|awk '{print $1+$2}'
0
然而您可以使用--use-lc-numeric
选项强制它使用当前区域设置的小数点分隔符:
$ echo $LC_NUMERIC
fr_FR.UTF-8
$ echo "0.1 0.2"|awk --use-lc-numeric '{print $1+$2}'
0
$ echo "0,1 0,2"|awk --use-lc-numeric '{print $1+$2}'
0,3
如果输入格式与当前区域设置不同,您当然可以暂时重新定义LC_NUMERIC:
$ echo $LC_NUMERIC
fr_FR.UTF-8
$ echo "0.1 0.2"|LC_NUMERIC=en_US.UTF-8 awk --use-lc-numeric '{print $1+$2}'
0
$ echo "0,1 0,2"|LC_NUMERIC=fr_FR.UTF-8 awk --use-lc-numeric '{print $1+$2}'
0,3
答案 4 :(得分:1)
我认为
s/\./,/g
应该满足你想要的......除非你想要更特别的东西......
答案 5 :(得分:1)
如果你有bash / ksh等
var=XXX.XXX
echo ${var/./,}
答案 6 :(得分:0)
由于问题也标记为awk
:
awk 'gsub(/\./,",")||1'