在小数点前面插入逗号恰好是1个空格

时间:2016-12-06 01:37:12

标签: linux shell ubuntu awk sed

我有一堆不稳定的字符串,例如,

SELECT title, CASE WHEN title = 'Sales' THEN 1.1 * salary ELSE 1.15 * salary END AS salary FROM yourTable

并希望使用SELECT t.*, CASE WHEN job = 'sales' THEN salary * 1.10 ELSE salary * 1.20 END AS salary FROM employees t 优先修复它,但也欢迎使用8000.000.189065200.059420490.024467260.126043470.189065200.129982320.024467260.059420490.19806830。我想要的是相当简单的:在sed恰好1个空格之前插入awk,以便字符串可以变为

,

你可以通过连续打印十进制数而不破坏它来判断某人犯了错误(实际上是我)。幸运的是,我们只有0到1的小数,所以这使得很多事情变得更容易。

问题是:我怎么能这样做?

非常感谢你的帮助!

3 个答案:

答案 0 :(得分:2)

使用GNU sed

echo 8000.000.189065200.059420490.024467260.126043470.189065200.129982320.024467260.059420490.19806830 | 
sed 's/0\./,&/2g' 

8000.00,0.18906520,0.05942049,0.02446726,0.12604347,0.18906520,0.12998232,0.02446726,0.05942049,0.19806830

2g将跳过第一场比赛并完成剩下的比赛

答案 1 :(得分:1)

以下符合POSIX的sed命令在每次出现,之前插入0.,然后删除第一个事件,得到所需的输出:

$ sed 's/0\./,&/g; s/,//' <<<'8000.000.189065200.059420490.024467260.126043470.189065200.129982320.024467260.059420490.19806830'
8000.00,0.18906520,0.05942049,0.02446726,0.12604347,0.18906520,0.12998232,0.02446726,0.05942049,0.19806830

注意:

  • 如果你有 GNU sedkarakfa's answer提供了一个更简单的解决方案。

  • 对于不以0.开头的数字,没有明确解决此问题的方法,除非假设是 - 如问题中的情况 - 只有第一< / em>每行的数字是一个数字&gt; = 1,带小数位。

答案 2 :(得分:1)

是不是有一个数字的模式,后面是一个句号,后跟两个数字?以下是否有效?

ian@simbian:~/t1$ cat t
8000.000.189065200.059420490.024467260.126043470.189065200.129982320.024467260.059420490.19806830

ian@simbian:~/t1$ sed 's/\([0-9]\.[0-9][0-9]\)/\1,/g' t
8000.00,0.18,9065200.05,9420490.02,4467260.12,6043470.18,9065200.12,9982320.02,4467260.05,9420490.19,806830