如何用awk/sed更改小数分隔符?

rac*_*cix 10 awk sed

如何将数字格式(不同的小数分隔符)更改XXXXXX.XXXXXXXXX,XXX使用sedawk

Mic*_*ber 10

你想要多严谨?您可以.像其他人所建议的那样更改所有字符,但如果您拥有的不仅仅是数字,那么这将允许很多误报.更严格的是要求点的两边都有数字:

$ 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
Run Code Online (Sandbox Code Playgroud)

这确实允许一对夫妇的多宗,即变化255.255.255.0a1.1a,但干净处理"正常"的数字.


AlM*_*hdi 8

这不会更准确,因为OP谈论数字......以确保它是点之前的前导数字.该文件可能包含OP不想替代的其他点.

sed '/[0-9]\./s/\./,/g'
Run Code Online (Sandbox Code Playgroud)


Ski*_*rou 7

如果您想为了美观而替换小数点分隔符

在大多数情况下tr,可能是替换字符的最简单方法:

$ echo "0.3"|tr '.' ','
0,3
Run Code Online (Sandbox Code Playgroud)

当然,如果您处理输入混合数字和字符串,您将需要一种更健壮的方法,例如 Michael J. Barber 提出的方法,甚至更多。

如果要替换小数点分隔符以进行计算

默认情况下gawk(GNU awk,即awk大多数 GNU/Linux 发行版)使用点作为小数点分隔符:

$ 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
Run Code Online (Sandbox Code Playgroud)

但是,您可以使用--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
Run Code Online (Sandbox Code Playgroud)

如果输入格式与当前语言环境不同,当然可以临时重新定义 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
Run Code Online (Sandbox Code Playgroud)

学分和其他链接


Roc*_*ock 1

你可以这样做:

echo "XXX.XX" | sed s/\./,/g
Run Code Online (Sandbox Code Playgroud)