如何用awk/sed更改小数点分隔符?
如何使用sed
或awk
将XXXXXX.XXX
的数字格式(不同的小数点分隔符)从XXXXXX.XXX
更改为XXXXXX,XXX
?除非ü想要的东西比较特殊如何用awk/sed更改小数点分隔符?
echo "XXX.XX" | sed s/\./,/g
你可以这样做也标记为awk
:
awk 'gsub(/\./,",")||1'
我觉得
s/\./,/g
应该成为ü想什么......
既然问题是:
如果你有庆典/ KSH等
var=XXX.XXX
echo ${var/./,}
不错,这是一个更麻烦的工作在所有POSIX shell: 'var = XXX.XXX; echo $ {var%。*},$ {var ## *。}' – schot 2010-08-09 11:28:27
这是不是可以作为OP whas谈论的数字更准确..以确保它是点之前领先的数字。该文件可以包含OP不想取代的其他点。
sed '/[0-9]\./s/\./,/g'
你想成为多么严谨?正如其他人所建议的那样,您可以更改所有.
字符,但如果您的数字不仅仅是数字,则会导致大量误报。严格的有点是要求有在点两侧的数字:
$ 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
的变化,但干净处理“正常”的数字。
如果你想更换小数点分隔符以美容为目的
在大多数情况下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
不必使用|| 1'的awk“GSUB(/\./ “”)' – ghostdog74 2010-08-09 10:42:07
@ ghostdog74'gsub'返回更换的次数,您的版本跳过该行不要包含至少一个点。我不太了解OP的输入数据以省略“|| 1”。 – schot 2010-08-09 10:59:44