我有一堆不稳定的字符串,例如,
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的小数,所以这使得很多事情变得更容易。
问题是:我怎么能这样做?
非常感谢你的帮助!
答案 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 sed
,karakfa'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