seq使用逗号和点作为小数分隔符

时间:2017-10-11 20:49:32

标签: bash seq

来自this回答我正在尝试使用点作为小数分隔符输出一系列数字。

这有效:

$ LANG=en_US seq 0.1 0.1 0.8
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8

$ LANG=en_US seq 0.1 0.1 1.0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0

但这不是:

$ LANG=en_US seq 0.1 0.1 0.9
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0,9

为什么呢?我该如何解决?

2 个答案:

答案 0 :(得分:2)

要阻止任何区域设置(例如LC_NUMERIC,这可能是罪魁祸首)影响行为:

LC_ALL=C seq 0.1 0.1 0.9

那就是说,我根本不建议使用seq。这是一个非标准命令,不保证在所有UNIX平台上都可用,或者在 可用时具有任何特定行为。一个支持浮点的替代方案,请考虑awk

LC_ALL=C awk -v min=0.1 -v max=0.9 -v inc=0.1 \
  'BEGIN { cur=min; while (cur <= max) { print cur; cur += inc; }; exit; }'

答案 1 :(得分:1)

这可能是因为LANG变量设置了区域设置并导致seq表现得像这样。目前尚不清楚为什么,但为了解决这个问题明确,我们可以tr。例如。

$ LANG=en_US seq 0.1 0.1 0.9 | tr "," "."
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9