2016-12-06 113 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將跳過第一場比賽和做休息