2016-12-06 73 views
-2

我有一堆不稳定的字符串,例如,插入逗号

8000.000.189065200.059420490.024467260.126043470.189065200.129982320.024467260.059420490.19806830

,并希望使用优选sed解决它,但是awk也受欢迎。我想是相当简单:插入,.正好是1位,所以该字符串可以成为

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

你可以告诉别人通过连续打印十进制数不破坏它犯了错误(实际上它是我)。幸运的是,我们只有0到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 

注:

  • 如果您有GNUsed,karakfa's answer提供了一个更简单的解决方案。

  • 对于未开始0.号码,也没有明确的解决这个问题,除了如果假设是 - 如似乎是在问题的情况下 - 即只有第一每行号是一个数字> = 1有小数位。

1

是不是模式,有一个数字,其次是一个时期,其次是2个数字?以下工作?

[email protected]:~/t1$ cat t 
8000.000.189065200.059420490.024467260.126043470.189065200.129982320.024467260.059420490.19806830 

[email protected]:~/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 
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将跳过第一场比赛和做休息